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 回答