我试图使用jQuery发布多维数组。我已经验证了在发送数组之前,它包含了它应该的内容(通过检查特定元素并提醒它们)。
但是,当我发送请求时,它会发送此信息:
Array
(
[undefined] =>
)
这是整个事情......
var mainArray = new Array();
$(".list").each(function(){
var day = $(this).attr("id");
var order = 1;
$("#" + id + " li").each(function(){
var subArray = new Array();
var id = $(this).attr("id");
subArray["id"] = id;
subArray["order"] = order;
subArray["day"] = day;
mainArray.push(subArray);
order++;
});
});
// This displays what I would expect
alert(mainArray[0]['id']);
alert(mainArray[1]['id']);
alert(mainArray[2]['id']);
alert(mainArray[3]['id']);
// This doesn't work
$.ajax({
type: 'post',
url: 'test2.php',
data: mainArray,
success: function(data) {
$("#test").html(data);
}
});
有什么想法吗?我的理解是jQuery应该自动序列化数组?
答案 0 :(得分:1)
在将数据发送到服务器之前将数据字符串
将数据作为地图发送
也是一种更好的做法而不是这个
data: mainArray,
尝试
data: { 'arr': JSON.stringify(mainArray) },
答案 1 :(得分:1)
你的代码完全错了!
首先,为您的二维数组提供一些名称,例如项目(或任何您想要的)。其次,你不能使用Array
创建哈希(理论上你可以,但它很糟糕,jQuery不理解这一点),你必须使用对象文字{}
而不是Array
,仅使用数字键Array
(使用文字[]
创建数组而不是new Array
)。你的代码:
var mainArray = [];
$(".list").each(function(){
var day = $(this).attr("id");
var order = 1;
$("#" + id + " li").each(function(){
var subArray = {};
subArray["id"] = $(this).attr("id");
subArray["order"] = order;
subArray["day"] = day;
mainArray.push(subArray);
order++;
});
});
$.ajax({
type: 'post',
url: 'test2.php',
data: { items: mainArray },
success: function(data) {
$("#test").html(data);
}
});
P.S。:您可以使用$.param
(将js对象转换为查询字符串)来找出您的错误