【问题标题】:Php array with ajax pass/send to other php file and in the other php file use as array with foreach带有ajax传递/发送到其他php文件的php数组,并在其他php文件中用作带有foreach的数组
【发布时间】:2013-07-18 12:43:25
【问题描述】:

<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);
}

然后一无所获。

如果commentdataType: '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 做了必要的事情......

终于得出结论,必须使用这种代码

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>';
}

【问题讨论】:

    标签: php ajax


    【解决方案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);
    }
    

    【讨论】:

    • 使用 Ajax 我还需要像这样通过&lt;td id data: { 'clickedId' : $(this).closest('td').attr('id'), 'Values' : values },
    • 使用foreach ($output as $i=&gt;$output_value ) { echo json_encode($output_value); } 也一无所获.... 和echo json_encode($output[$i]); 相同但echo json_encode($output['record_date']); 外部foreach 工作...
    • 复制并过去我的第一个代码示例。我刚刚测试了它,它对我有用。 pastebin.com/UfPAc2ET 如果它不起作用,请在 foreach 循环中使用 var_dump($output_value) 看看出了什么问题。
    • 不如预期。我做了实验。更新后的问题写了什么......目前无法理解为什么代码会以这种方式工作
    猜你喜欢
    • 2016-09-04
    • 2012-05-17
    • 2011-09-17
    • 1970-01-01
    • 2012-12-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多