输入表格如<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 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>';
}
做了必要的事情......
最后得出结论,必须使用这种代码
{{1}}
答案 0 :(得分: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);
}