【发布时间】:2014-04-22 14:06:10
【问题描述】:
我创建了两个非常相似的表单,使用 jquery 来发出 Ajax/Php 请求。唯一的区别是第一种形式发送一个数组并得到一个多维数组作为响应,第二种形式发送一个多维数组并得到另一个多维数组。
这是第一种形式的jQuery请求
$('#myFirstformid').submit(function(event) {
event.preventDefault();
var ajaxArray = new Array();
ajaxArray.push(data1);
ajaxArray.push(data2);
ajaxArray.push(data3);
var ajaxData = { ajaxArray: JSON.stringify(ajaxArray) };
$.ajax({
type: 'POST',
url: '../form-response-first-form.php',
data: ajaxData,
dataType: 'json',
success: function (data) {
console.log(data);
$.each(data, function(index, element){
//...do something...
});
}
});
});
这是第一式的php文件:
<?php
class ajax {
function calc() {
$ajaxArray = json_decode(stripslashes($_POST['ajaxArray']));
$data1 = $ajaxArray['0'];
$data2 = $ajaxArray['1'];
$data3 = $ajaxArray['2'];
//Array da ritornare al form
$returnAjax = array();
/*
...make some operation and push data in returnAjax...
*/
return json_encode($returnAjax);
}
}
$ajax = new ajax;
echo $ajax->calc();
?>
这里是第二种形式的jQuery请求:
$('#mySecondformid').submit(function(event) {
event.preventDefault();
//Create the multidimensional array to send by getting value from the rows of the table
var ajaxArray = $( "#preview tbody tr" ).map( function(){
var tds = $(this).find( "td" );
return {
data1: tds.eq(0).html(),
data2: tds.eq(1).html(),
data3: tds.eq(2).html()
};
}).get();
var ajaxData = { ajaxArray: JSON.stringify(ajaxArray) };
$.ajax({
type: 'POST',
url: '../form-response-second-form.php',
data: ajaxData,
dataType: 'json',
success: function (data) {
console.log(data);
$.each(data, function(index, element){
//...do something...
});
}
});
});
这里是第二个的 php 文件:
<?php
class ajax {
function calc() {
$ajaxArray = json_decode(stripslashes($_POST['ajaxArray']));
//Array da ritornare al form
$returnAjax = array();
foreach ($ajaxArray as $value){
//...make some operation foreach subarray and push data in returnAjax...
}
return json_encode($returnAjax);
}
}
$ajax = new ajax;
echo $ajax->calc();
?>
我不明白为什么第一种形式可以正常工作,而第二种则不能。
似乎没有来自服务器的响应,因为控制台日志中没有任何内容。 提前致谢
*编辑
@SAM 我已经进行了测试,现在我确定对服务器的请求是正确的,但我得到了一个空响应。
另外测试我在php文件里面手动添加了多维数组,php的逻辑是对的。这就是数组
<?php $ajaxArray = array(
0 => array(from => "01/01/2010",
to => "01/01/2011",
type => "Credit",
amount => 10000.00
),
1 => array( from => "01/01/2011",
to => "01/01/2012",
type => "Debit",
amount => 200.00),
2 => array( from => "01/01/2012",
to => "01/01/2013",
type => "Debit",
amount => 100.00),
3 => array( from => "01/01/2013",
to => "23/04/2014",
type => "Debit",
amount => 100.00)
);
?>
所以我认为唯一可能出错的是 jQuery 代码没有创建正确的多维数组。多维数组是通过从表中获取值来创建的,看看这个小提琴http://jsfiddle.net/6q8cS/6/
【问题讨论】:
-
你好,首先检查第二种形式的'ajaxData'是否有值,如果有,确保它是一个正确的JSON对象。其次,既然你说过,你在console.log()中得到一个空响应,这意味着你对服务器的请求是正确的,并确保你得到HTTP状态200,那么PHP的逻辑一定有问题
-
嗨,我知道ajaxArray(多维数组)中有值,所以如果这些代码:“var ajaxData = { ajaxArray: JSON.stringify(ajaxArray) };”是正确的,这意味着 ajaxData 具有正确格式化为 JSON 的值。最后我说过我根本没有得到任何响应。