【问题标题】:How to access all elements in an array from php that is passed by an ajax call?如何从 ajax 调用传递的 php 访问数组中的所有元素?
【发布时间】:2013-02-14 18:25:56
【问题描述】:

我发现难以从 php 文件访问数组中的元素。该数组通过 ajax 调用传递。请在 ajax 调用下方找到。

var data = ['test1', 'test2', 'test3'];
$(document).ready(function () {
    $("button").click(function () {
        $.ajax({
            type: "POST",
            url: "getResult.php",
            data: {
                testData: data
            },
            success: function (data, status) {
                alert("Data: " + data + "\nStatus: " + status);
            }
        });
        return false;
    });
});

服务器端[PHP]代码是

$myArray = $_POST["testData"];
echo $myArray; 

但是 $myArray 总是返回数组中的最后一个元素[test3 here]。如何首先访问 [here test1] 和其他元素? 请帮忙。

【问题讨论】:

  • 你需要 JSON.stringify() JS 中的数组,然后 json_decode() 它在 php.ini 中。这样你最终会得到一个原生 PHP 数组,并像访问任何其他数组一样访问它。
  • ^^ 是对的。这是一个类似的讨论:stackoverflow.com/questions/2013728/…
  • 没有json就没有办法做到这一点吗? jQuery 如何发送选中的复选框输入值?
  • 如果您将变量命名为 testData[] 会发生什么?

标签: php javascript jquery ajax arrays


【解决方案1】:

您需要做的是将 JavaScript 数组转换为 JSON,然后通过该 JSON 发送。 在 PHP 端,您应该将 JSON 解码回一个数组。最后,您应该在将数组发回之前将其重新编码为 JSON。

在您的客户端更改一行:

data: {testData : JSON.stringify(data)},

在你的服务器端做:

$myArray = json_decode($_POST["testData"]);
header('Content-Type: application/json');
echo json_encode(array('pheeds' => $pheeds, 'res' => $res));

【讨论】:

    【解决方案2】:

    JS:

    JSON.stringify(data)
    

    PHP:

    $myArray = json_decode($_POST['data']);
    

    【讨论】:

      【解决方案3】:

      对于简单的结构,您可以使用jQuery Param

      data : $.param({testData:data})
      

      有了这个,你应该能够访问你的数据

      echo $_POST["testData"][0]...[2];
      

      【讨论】:

        【解决方案4】:

        通过 ajax 传递 JS 变量时试试这个。

        使用 Firebug 在控制台上查看 PHP 文件中的内容,这将为您省去很多麻烦。

        您将看到该数组是一个 OBJECT ,因此您希望将此数组作为 JSON / STRING 发送到 PHP 文件。

        使用:

         var data = ['test1','test2','test3'];
         data = JSON.stringfy(data);
        

        在 PHP:

             $data = var_post('test_data');
             $data=json_decode($data);
             $print_r($data);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-20
          • 1970-01-01
          • 2020-03-06
          • 2011-12-14
          • 1970-01-01
          • 2015-09-09
          • 2017-08-25
          • 1970-01-01
          相关资源
          最近更新 更多