0

我正在尝试使用 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 应该自动序列化数组?

4

2 回答 2

1

在将数据发送到服务器之前对数据进行字符串化

此外,将数据作为地图发送也是一种更好的做法。

而不是这个

data: mainArray,

尝试

data: { 'arr': JSON.stringify(mainArray) },
于 2012-12-19T20:52:10.037 回答
1

你的代码完全错误!

首先,为您的二维数组命名,例如项目(或任何您想要的)。其次,您不能Array用于创建哈希(理论上可以,但它很糟糕,jQuery 不理解这一点),您必须使用对象文字{}而不是ArrayArray只能与数字键一起使用(使用文字[]来创建数组而不是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);
    }
});

PS:您可以使用$.param(将 js 对象转换为查询字符串)来找出您的错误

于 2012-12-19T20:57:59.653 回答