0

次のような深い多次元入力を含むフォームがあります。

<form id="theForm">
 <input type='text' name='one[two][three][]' />
 <input type='text' name='one[two][three][]' />
 <input type='text' name='four[five][six][seven]' />
 <input type='text' name='eight[nine][ten]' />
</form>

フォームが正常に送信された場合と同じ形式で、AJAX 経由で値を送信しようとしています。つまり、送信ボタンを押すと、PHP で $_POST は次のようになります。これは私が欲しいものです:

array( 'one' => array( 'two' => array('three'=>array( [0] => "", [1] => "" ) ) ),
       'four' => array( 'five' => array ('six' => array( 'seven' => "" ) ) ),
       'eight' => array( 'nine' => array( 'ten' => "" ) ) )
     )

私は基本的にフォーム送信をAJAXしようとしています。私がする時

$("#theForm").serializeArray()

$_POSTを介した送信は$.post()次のようになります。

array( [0] => array( "name" => string "one[two][three][]",  value=>"")
       [1] => array( "name" => string "one[two][three][]",  value=>"")
       [2] => array( "name" => string "four[five][six][seven]",  value=>"")
       [3] => array( "name" => string "eight[nine][ten]",  value=>"")
     )

これは私には役に立たない。前に概説した多次元構造を保持する必要があります。配列を調べて、文字列を切り刻んで必要なものを再作成できると思いますが、これはばかげているように思えます。これを達成するためのjQueryフレンドリーな方法はありますか?

jQuery がどのように多次元配列を送信できるかについての他の投稿を読んだので、おそらく質問する必要があるのは、フォーム データを抽出して多次元配列に保持するにはどうすればよいかということです。

4

2 に答える 2

4

私の推測では、あなたがしているAJAX呼び出しを行っているときです:

data: {data: $("#theForm").serializeArray()}

dataの値に設定するだけですserializeArray

data: $("#theForm").serializeArray()

編集:あなたはあなたが使用していると言いました$.post、そして私はあなたがこれをしていると思います:

$.post('/your/url', {data: $("#theForm").serializeArray()}, function(){});

それが機能するためには、次のようにする必要があります。

$.post('/your/url', $("#theForm").serializeArray(), function(){});
于 2013-02-27T20:31:27.600 に答える
2

受け入れられた答えは完全に正しいです。補足として、投稿データの配列に他のデータを追加する必要がある場合は、それを次の形式で配列にプッシュするだけです。{name: "", value: ""}

私の場合、フォーム内のすべての入力からの値に加えて、ユーザーがクリックしたボタンに基づいて値を追加したいと考えました。したがって、あなたがしなければならないことは次のとおりです。

var data = $("#myForm").serializeArray();
data.push({name: "btnVal", value="button_a"});

そして、次のように投稿してください。

$.post("/some/url", data, function(){});
于 2013-03-01T18:29:01.967 に答える