具有类似<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
更新
如果在ajax中使用dataType: 'json',
和php
foreach ($output as $key => $output_value) {
echo json_encode($output_value);
}
然后什么也得不到。
如果注释dataType: 'json',
,请参见["02.07.2013","01.07.2013"]。
如果使用echo $output_value;
而不是echo json_encode($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 ($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>';
}
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
但有一点让我困惑。为什么要将序列化的表单数据作为单个值传递,而可以将其作为post数据本身传递?在这种情况下,您不需要使用parse_str()
,您的代码如下:
JS:
var values = $("form").serialize();
$.ajax({
type: 'POST',
data: values,
dataType: 'json',
PHP:
foreach ($_POST as $value) {
echo json_encode($value);
}