1

$.ajaxフォームの値を PHP スクリプトに送信するために使用しています。

フォーム入力フィールドは PHP によって配列のように読み取られますが、javascript と jQuery で同じことを行い、PHP が配列のように読み取れるように送信する方法がわかりません。

たとえばfoo[bar]、PHPで名前が付けられた入力は、次のように取得されます$_POST['foo']['bar']

現在、私はこのデータを次のように送信しています

data:{
   foo_bar: $('form').find('#foo_bar').val(),
   foo_xxx: $('form').find('#foo_xx').val()
},

PHPスクリプトで配列を手動で組み立てます。

しかし、多くのコード行が必要になり始めています。どうにかしてこれを自動化し、すべてのフォーム入力を多次元配列として PHP に送信できますか?

4

2 に答える 2

5

$ .serialize();を使用できます。

data: {
  d: $('form').serialize()
}

詳細については、http://api.jquery.com/serialize/を確認してください。

文字列が返送され、それを処理するためにfield=value&field2=value&使用できますparse_str

parse_strサンプル:

$foo = "t[]=1&t[]=2&b=3";
parse_str($foo, $bar);
var_dump($bar);

結果:

array(2) {
  ["t"]=>
  array(2) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
  }
  ["b"]=>
  string(1) "3"
}
于 2012-06-22T15:01:14.480 に答える
4

特別なことをする必要はありません。フィールド名を、PHP に解釈させたい方法で正確に宣言します。

<form>
<input name="foo[bar]" id="foo_bar">
<input name="foo[xxx]" id="foo_xxx">
<input name="a[]" id="a_0">
<input name="a[]" id="a_1">
<input name="b[0][1][2]" id="b_0_1_2">
</form>

jQuery.serialize期待どおりにフォーム フィールドを URL エンコードします。

data: $("form").serialize()
// foo%5Bbar%5D=&foo%5Bxxx%5D=&a%5B%5D=&a%5B%5D=&b%5B0%5D%5B1%5D%5B2%5D=

これがクエリ文字列として PHP ページに渡されると、次のようになります。

/phpinfo.php?foo%5Bbar%5D=&foo%5Bxxx%5D=&a%5B%5D=&a%5B%5D=&b%5B0%5D%5B1%5D%5B2%5D=

あなたは得る:

$_GET["foo"] = Array
(
    [bar] => 
    [xxx] => 
)
$_GET["a"] = Array
(
    [0] => 
    [1] => 
)
$_GET["b"] = Array
(
    [0] => Array
        (
            [1] => Array
                (
                    [2] => 
                )
        )
)
于 2012-06-22T15:05:19.073 に答える