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 }

...等...对于每个输入。

显然,从$.each输出中,我应该能够以 object.name 和 object.value 的形式访问数据,然后将所有内容格式化为一个新数组以使其与我的 PHP 脚本一起使用,但这是这样做的方法吗?或者,还有更好的方法?

4

2 回答 2

3
The .serialize() method creates a text string in standard URL-encoded notation.

这意味着它将用[and]替换%5Band %5D。由于它是一个文本字符串,因此一种方法是将它们替换回来。

例子

var ser = $('#id').serialize();

ser = ser.replace(/%5B/g,"[");
ser = ser.replace(/%5D/g,"]");

JS小提琴

于 2013-04-04T07:50:07.043 回答
0

更简单的是使用 jQuerys $.param() 函数。http://api.jquery.com/jquery.param/

于 2015-03-31T21:24:44.733 回答