如何使用PHP的jQuery / AJAX调用迭代JSON数组?

How do I iterate over a JSON array using jQuery/AJAX call from PHP?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Loop through Json object

我有一个php函数,data.php,它从外部服务器url获取json数据,如下所示:

1
2
3
4
5
<?php
$url ="https://dev.externalserver.net/directory";
$content = file_get_contents($url);
echo json_encode($content);
?>

检索到的JSON数组如下所示:

1
2
3
4
5
6
7
8
9
10
11
[
   {"name":"Not configured",
    "mac_address":"1111c11c1111",
    "online":"false",
    "rate":"Not configured" },

   {"name":"Not configured",
    "mac_address":"0000c00c0000",
    "online":"false",
    "rate":"Not configured" }
]

我现在正试图对该PHP函数编写一个Ajax调用,遍历JSON数组,并在浏览器中以非JSON格式显示它。我的Ajax代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
$.ajax({ url: 'data.php',
         type: 'POST',
         dataType: 'json',
         success: function(output) {            
            $.each(output, function() {
                $.each(this, function(key, value){
                    alert(key +" -->" + value);
                });
            });
                                   }
});

我的问题是,代码当前显示的警告框显示数组中的单个字符,如:0 --> [0 -->0 --> {…等

我如何使用json_encode()和datatype:'json'传递数据有问题吗?或者我如何迭代数组来解决这个问题?

谢谢。


其他响应者忽略了这个秘密但仍然很明显的一点,即从PHP中被轮询的资源返回的内容可能已经是有效的JSON,并且重新编码它会导致浏览器仅仅将其解释为一个字符串。在这种情况下,JavaScript从来没有机会。

去掉php中的json_encode()位,然后回送返回的内容,看看是否没有改善。


我认为你的问题是第二个each中的this。尝试:

1
2
3
4
5
$.each(output, function(key, value) {
    $.each(value, function(key, value){
        alert(key +" -->" + value);
    });
});


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var jsonArray = [
     {"name":"Not configured",
        "mac_address":"1111c11c1111",
        "online":"false",
        "rate":"Not configured" },

       {"name":"Not configured",
        "mac_address":"0000c00c0000",
        "online":"false",
        "rate":"Not configured" }
    ];

    $.each(jsonArray, function() {
      for (var key in this) {
        if (this.hasOwnProperty(key)) {
          console.log(key +" ->" + this[key]);
        }
      }
    });


看看这个

如何循环或枚举JavaScript对象?