0

有输入表格,如<input type="text" name="record_date[] ...

将表单发送到其他 php 文件的 ajax 的一部分是

var values = $("form").serialize();
$.ajax({
type: 'POST',
data: { 'Values' : values },
dataType: 'json',

另一个php文件接收数据

$values = $_POST['Values'];

据了解,这parse_str($_POST['Values'],$output);会创建数组($output是数组)

但是有了这个print_r(json_encode($output));我什么都看不到(预计会看到带有值的数组等)

如果使用echo json_encode($output['record_date']);,则一切正常并获得输入的值。

尝试创建数组,然后像这样使用数组

 foreach ($output as $i=>$output_value ) {
 echo json_encode($output_value[$i]);
 }

改为这个echo json_encode($output_value['record_date'][$i]);,但在这两种情况下都没有回应。

据我了解,主要问题是如何“修改/转换”parse_str($_POST['Values'],$output);为 php 数组

$_POST['Values']看起来像这样:record_date%5B%5D=02.07.2013&record_date%5B%5D=01.07.2013

可能而不是parse_str需要使用其他东西

更新

如果在 ajaxdataType: 'json',和 php中使用

foreach ($output as $key => $output_value) {
echo json_encode($output_value);
}

然后什么都得不到。

如果 comment dataType: 'json',,则参见 ["02.07.2013","01.07.2013"]。

如果不echo json_encode($output_value);使用echo $output_value;,请查看长列表ArrayArrayArrayArrayArray

如果在内部foreach使用var_dump($output_value);,则如下所示

array(2) { [0]=> string(1) "2" [1]=> string(1) "6" } 
...............
array(2) { [0]=> string(10) "02.07.2013" [1]=> string(10) "01.07.2013" }

似乎echo $output[$key][0]在 foreach 内部做了必要的事情......

最后得出结论,必须使用这种代码

foreach ($output[record_date] as $key => $output_value) {
echo $output_value. ' output value<br>';
echo $output[other_name_from_html_input][$key]. ' output date selector value<br>';
}
4

1 回答 1

1

parse_str()实际上做了你需要的。

parse_str($_POST['Values'], $output);
foreach ($output as $key => $output_value) {
    echo json_encode($output_value);
}

您的问题是您不了解 foreach 循环的工作原理。$output_value已经是当前迭代的数组元素的值,因此您不需要将它与索引一起使用。如果要使用索引,则应将它们与原始数组一起使用,如下所示:

foreach ($output as $key => $output_value) {
    echo json_encode($output[$key]);
}

仔细阅读:PHP:foreach

但是有一点让我很困惑。当您可以将其作为发布数据本身传递时,为什么要将序列化的表单数据作为单个值传递?在这种情况下,您不需要使用parse_str(),您的代码如下:

JS:

var values = $("form").serialize();
$.ajax({
type: 'POST',
data: values,
dataType: 'json',

PHP:

foreach ($_POST as $value) {
    echo json_encode($value);
}
于 2013-07-18T12:47:27.937 回答