web-dev-qa-db-ja.com

Jquery AJAX postで多次元配列を渡す方法は?

私はSerialize()を使用して、同じカテゴリの複数のアイテムを保持できるバスケットのチェックボックスフォームデータをPost()で渡しました。

送信ボタンを使用して投稿すると、複数の値が渡され、1つのカテゴリに表示されます。

ただし、Jquery serialize()を使用すると、カテゴリごとに1つのアイテムのみが表示され、合計で2つのカテゴリのみが表示されます。これはアレイの問題ですが、解決できません。

多次元配列を渡すために使用する必要がある代替のJQuery関数はありますか?

9
user1337603

Jqueryは多次元配列を直接取得するため、シリアル化する必要はありません。

var data = {
  foo:  123,
  bar:  456,
    rows: [
      {
        column1 : 'hello',
        column2 : 'hola',
        column3 : 'bonjour',.
      },
      {
        column1 : 'goodbye',
        column2 : 'hasta luego',
        column3 : 'au revoir',
      },
    ],
    test1:{
      test2: {
        test3:  'baz'
      }
    }
};

_ PHPファイルのPostデータは次のようになります

Array
   (
    [foo] => 123
    [bar] => 456
    [rows] => Array
        (
            [0] => Array
                (
                    [column1] => hello
                    [column2] => hola
                    [column3] => bonjour
                )

            [1] => Array
                (
                    [column1] => goodbye
                    [column2] => hasta luego
                    [column3] => au revoir
                )

        )

    [test1] => Array
        (
            [test2] => Array
                (
                    [test3] => baz
                )

        )

    )

データの多次元配列を定義すると、Ajaxは次のように単純になります。

$.ajax({
          type:           'post',
          cache:          false,
          url:            './ajax.php',
          data:           data
      });

あなたの投稿配列にあなたが知らないフィールドがあるかもしれない場合、あなたはあなたのphpファイルのあなたの投稿配列に簡単にアクセスすることができます

$data = file_get_contents('php://input');
$data = json_decode($data, true);
16

良い解決策が見つからなかったので、これを使用して解決しました JSON.stringify(); これが私のコードです

クライアント側 :

var data = {a:{'foo':'bar'},b:{'this':'that'}};
$.ajax({ url        : '/',
         type       : 'POST',                                              
         data       : {'data':JSON.stringify(data)},
         success    : function(){ }
       });

サーバ側:

$data = json_decode($_POST['data']);
print_r($data);
// Result:
// Array( "a" => Array("foo"=> "bar"), "b" => Array("that" => "this"))
2
Maddy
$.post(url, {"myarray":arrayData}, function(data){/*stuff*/}, 'json');

サーバー側では、たとえばphpでアクセスします

$myArray = $_POST['myarray'][0];
foreach($myArray as $item)
{
   /*logic here for picking apart your array*/
}
1
chris

JQueryドキュメントから:

フォーム要素の値をシリアル化された文字列に含めるには、要素にname属性が必要です。チェックボックスとラジオボタン(タイプ「radio」または「checkbox」の入力)からの値は、それらがチェックされている場合にのみ含まれます。

最初にコードを確認してください。あなたのコードを見ずにさらに助けるのは難しい。

0
Aaron

これが私のメタコードフラグメントです。これは私にとっては問題なく機能します...

    var f={};  

    f.text = "SOME DATA";
    f.any_other_field = some_other_value;
    f.items = [];

    $("#droppable .or").each(function(ee){
          var tmp={};
          tmp.id    = $(this).data("cid");
          tmp.name  = $(this).find(".ornazev").text();
          tmp.price = $(this).data("price");
          tmp.currency = $(this).data("currency");
          tmp.ks    = 1;  
          f.items.Push(tmp);
    });
    $.ajax({
      type: "POST",
      url: urlsave,
      data: {"f":f},
      dataType: "text",
.....
0
hugo