循环遍历 JSON 数组

Posted

技术标签:

【中文标题】循环遍历 JSON 数组【英文标题】:Loop through JSON Array 【发布时间】:2013-02-12 12:04:45 【问题描述】:

我有一个要传递给 php 的 JSON 数组。最终,我将从我的 PHP 文件中传递和接收更多信息,但目前就是这样。现在它正在接收 1 个数组并发送回同一个数组,没问题。我可以遍历 javascript 中的数据,但是如何遍历传递给我的 PHP 文件的数组?我在使用 foreach 时遇到错误,而 for 循环似乎没有任何帮助。有什么建议吗?

Javascript

var fullName = ["John Doe", "Jane Doe"];

$(window).load(function()
    getList();
);

function getList()
    $.getJSON(
        "names.php",
        names : JSON.stringify(fullName),
        function(data) 
        
            for(var i = 0; i < data.test.length; i++)
            
                window.alert(data.test[i]);
            
        
      );

PHP

<?php
    $names=json_decode($_REQUEST['names']);

foreach($names as $name)

    echo $name;


    $data['test'] = $names;
    echo json_encode($data);

foreach 行上的 foreach 错误告诉我“警告:为 foreach() 提供的参数无效”

【问题讨论】:

使用该 for 循环会出现哪个错误?并且还请发布收到的 JSON(在您的开发工具的网络面板上检查它) 在你的 PHP 中,$names 应该是一个数组。阅读有什么问题? 参数无效?到什么?是 PHP 还是 JS 错误?请发布确切的错误消息,包括它指向的行。 var_dump($names) - 它是一个数组吗?有什么事吗? success 在 jquery 中只是意味着脚本被调用没有任何问题。这并不意味着脚本本身没有错误。 【参考方案1】:

json_decode() 不返回数组。要做到这一点,您需要这样做 json_decode($_REQUEST['names'], true)

http://php.net/manual/en/function.json-decode.php

【讨论】:

确实如此,但示例数据看起来已经是一个数组。【参考方案2】:

使用的时候好像有什么奇怪的事情:

names : JSON.stringify(fullName)

当您使用GETPOST 发送键值对时,您可能需要正确编码值。

你可以这样做:

names : encodeURIComponent(JSON.stringify(fullName))

【讨论】:

仍然没有运气。我的var_dumps 仍然显示为 NULL。也许我需要使用不同的 ajax 方法。【参考方案3】:

编辑:jQuery又疯了。

$.getJSON("names.php?names=" + encodeURIComponent(JSON.stringify(fullName)), function(data)
        
                for(var i = 0; i < data.test.length; i++)
                
                        window.alert(data.test[i]);
                
        
);

问题在于它将数组中的每个项目作为单独的值添加到 URI。

【讨论】:

这个也不走运。它甚至打破了原本可以工作的警报(即使它不应该)【参考方案4】:

试试

$names=json_decode($_POST['names']); // or $_GET

而不是

$names=json_decode($_REQUEST['names']);

由于 php.ini 配置,有时 $_REQUEST 可能为空。见request_order

【讨论】:

【参考方案5】:

试试这个, 在您的 javascript 函数中,将下面的行替换为

 names : JSON.stringify(fullName),

"names :"+ JSON.stringify(fullName) +"",

调试测试

var fullName = ['John Doe', 'Jane Doe'];
console.log(names : JSON.stringify(fullName));
// gives Object  names="["John Doe","Jane Doe"]"

但有

console.log("names :"+ JSON.stringify(fullName) +"");
// gives names :["John Doe","Jane Doe"]

// 所以我猜第二个是正确的 json 字符串传递

【讨论】:

当我按照建议使用console.log 时,我确实得到了names :["John Doe","Jane Doe"] ,但在我的PHP 中,当我使用var_dump 时,我仍然得到空值。 好的,退一步试试,我们暂时去掉全名数组,只传names : "my test name1",检查php脚本中是否得到正确的值。如果你得到正确的值,这意味着我们已经确定了数组到 json 字符串的问题。否则还有一些其他问题 PHP 中仍然没有任何内容,全部为空。肯定有什么问题,但我以前使用过类似的脚本。我只是从头开始尝试下面提到的ajax方法......【参考方案6】:
/* client-side */
$.ajax(

   /* the request's method: */
   type: 'GET',

   /* the request's location: */
   url:'/names.php',

   /* the request's fields: */
   data: JSON.stringify(names: fullName),

   /* the request's content-type : */
   contentType: 'application/json; charset=utf-8',

   /* the response's content-type: */
   dataType:'json',

   /* the callback function */ 
   success: function(json)

     if(json.length > 0)
         $.each(json, function(i, v)

            console.info(v);

         );
      
      else 
         alert('wtf?!');
      
);

/* server-side */
$req=array_merge($_GET, $_POST);

// die(print_r($req));

$names=json_decode($req['names']);
header('content-type: application/json; charset=utf8;');
echo json_encode($names);

另外,可以为请求设置请求方法,我只是有点懒惰,使用 array_merge() 请求是 POST 还是 GET 都没关系(好吧,函数 $.ajax 默认要得到)。最佳实践是使用 FireBug 并检查它的网络面板,尤其是 XHR 选项卡。可能问题应该是:“如何使用 XHR 调试器?”因为这根本没有什么棘手的。

jQuery API 似乎略有更新(参见弃用通知):

http://api.jquery.com/jQuery.ajax/

https://getfirebug.com

【讨论】:

如果 FireBug 不工作......你一定错过了一些基本的东西。此代码和上面发布的代码都应该“工作” - 至少将任何内容记录到 JS 控制台。 除了“不工作”不被视为错误描述......虽然你没有告诉确切的请求错误出在哪里 - 这只是猜测。至少这是一个示例,如何为请求和响应创建正确的标头......并且 FireBug(应该)详细显示发生了什么。 你真的用过JS调试器吗?在为某些变量和一些断点设置监视时,这一切都有些明显,例如回调时。 只需在 $ 或 jQuery 上设置一个监视 ... 你就可以检查 jQuery 本身 我想我必须承认问题似乎根本不在于 Jquery 和 PHP。很好的咆哮。

以上是关于循环遍历 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历 JSON 数组

求最简单的方法进行原生js 循环遍历树(json数据)

jQuery循环遍历JSON数组

php:循环遍历json数组

php 循环遍历json数据

如何循环遍历 JSON 数组?