jQuery AJAX,数组没有被序列化

时间:2012-12-19 20:42:26

标签: javascript jquery ajax multidimensional-array

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

2 个答案:

答案 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对象转换为查询字符串)来找出您的错误

相关问题