1

すべての入力からデータを多次元配列として収集するフォームがあり、標準のフォーム送信機能を使用すると、ターゲット ページが読み込まれ、PHP スクリプトが多次元配列を完全に読み取り、目的の出力が得られます。

<form action="target.php" method="post">

<?php foreach ($days as $day) { ?>

    <select name="roster[<?php echo $day->date() ?>][1]"> ... </select>
    <select name="roster[<?php echo $day->date() ?>][2]"> ... </select>
    <select name="roster[<?php echo $day->date() ?>][3]"> ... </select>

<?php } ?>

<input type="submit">
</form>

ターゲット PHP ファイルでは、これを でピックアップ$_REQUEST['roster']するだけで、通常の PHP 配列として操作できます。できるだけシンプルに。

ただし、これをjQueryを使用してAJAXリクエストに変換したいと思います。$('form').serialize()orを使用してフォームデータを取得するといういくつかの提案を読みました$('form').serializeArray()が、これは配列を正しく読み取らず、奇妙な出力を生成します。

私は現在、基本的にDOMをトラバースし、要素データから新しいjavascript配列またはオブジェクトを構築し、これを 経由$.ajax()で送信することを含む他の提案をいじっていますが、すべてが不必要に複雑に思えます。

私の質問は次のとおりです:このフォーム配列データを jQuery を介して送信する簡単な方法はあり$.ajax()ますか?

おそらくそこにあり、明らかに出血していますが、現時点では見えません!

編集:

以下は、標準のフォーム送信機能からのprint_r出力です: (読みやすいように整形されています):$_REQUEST['roster']<pre>

Array
(
[2013-04-06] => Array
    (
        [1] => 8
        [2] => 3
        [3] => 7
    )

[2013-04-13] => Array
    (
        [1] => 4
        [2] => 3
        [3] => 7
    )

[2013-04-20] => Array
    (
        [1] => 8
        [2] => 17
        [3] => 7
    )

[2013-04-27] => Array
    (
        [1] => 4
        [2] => 3
        [3] => 7
    )

)

そして、ここに出力があります$('form').serialize()

roster%5B2013-04-06%5D%5B1%5D=8&roster%5B2013-04-06%5D%5B2%5D=3&roster%5B2013-04-06%5D%5B3%5D=7&roster%5B2013-04-13%5D%5B1%5D=0&roster%5B2013-04-13%5D%5B2%5D=0&roster%5B2013-04-13%5D%5B3%5D=0&roster%5B2013-04-20%5D%5B1%5D=0&roster%5B2013-04-20%5D%5B2%5D=0&roster%5B2013-04-20%5D%5B3%5D=0&roster%5B2013-04-27%5D%5B1%5D=0&roster%5B2013-04-27%5D%5B2%5D=0&roster%5B2013-04-27%5D%5B3%5D=0

そしての出力$('form').serializeArray()

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

次に、それぞれ[object Object]を使用してデータを抽出すると

$.each(data, function(index1, value1) {
    $.each(value1, function(index2, value2) {
        $('body').append('index1: '+index1+' value1: '+value1+' { index2: '+index2+' value2: '+value2+' }');
    });
});

私は得る:

index1: 0 value1: [object Object] { index2: name  value2: roster[2013-04-06][1] }
index1: 0 value1: [object Object] { index2: value value2: 8 }
index1: 1 value1: [object Object] { index2: name  value2: roster[2013-04-06][2] }
index1: 1 value1: [object Object] { index2: value value2: 3 }

...etc... 入力ごとに。

明らかに、$.each出力から、object.name および object.value としてデータにアクセスし、すべてを新しい配列にフォーマットして、PHP スクリプトで機能させることができるはずですが、これはそれを行う方法ですか? またはより良い方法はありますか?

4

2 に答える 2

0

jQuerys $.param() 関数を使用する方が簡単です。http://api.jquery.com/jquery.param/

于 2015-03-31T21:24:44.733 に答える