我有一个表单,它从它的所有输入中收集数据作为多维数组,并使用标准表单提交函数,这会加载目标页面,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 }
...等...对于每个输入。
显然,从$.each
输出中,我应该能够以 object.name 和 object.value 的形式访问数据,然后将所有内容格式化为一个新数组以使其与我的 PHP 脚本一起使用,但这是这样做的方法吗?或者,还有更好的方法?