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

あなたのコードは完全に間違っています!

最初に、2次元配列に、たとえばアイテム(または任意の名前)などの名前を付けます。次に、ハッシュの作成には使用できません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);
    }
});

PS:あなたは$.paramあなたの間違いを理解するために使うことができます(jsオブジェクトをクエリ文字列に変換します)

于 2012-12-19T20:57:59.653 に答える