3

我想使用javascript(不是jquery)从php服务器读取json

xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {

            json = xmlhttp.responseText;
            JSON.parse(json, function (key, val) { 
                alert(key + '-'+ val);
            });

        }
}

在php文件中我做

$data = array();
$data['id'] = '1';
$data['name'] = '2';

print json_encode($data);

但输出是

id-1
name-2
-[object Object] // why??

怎么解决 谢谢

4

2 回答 2

2

如果您使用的是普通的 javascript,您想遍历对象的属性,您可以在 javascript withfor in语句中做到这一点。

<script>
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    alert(xmlhttp.responseText);

    var data = JSON.parse(xmlhttp.responseText);
    for(key in data)
{
    alert(key + ' - '+ data[key]); //outputs key and value
}   

    }
  }
xmlhttp.open("GET","sample.php",true);    //Say my php file name is sample.php
xmlhttp.send();
</script>
于 2013-08-10T13:42:30.367 回答
1

MDN 文档中关于JSON.parse

最终使用空字符串和最高值调用 reviver 以允许转换最高值。

解析{"id":"1","name":"2"}将生成一个 JavaScript 对象。因此,在最后一次调用 reviver 函数时,key是一个空字符串,val是生成的对象。
任何对象的默认字符串表示形式是[object Object],因此您得到的输出并不奇怪。

这是一个更简单的例子:

//                              object   vv
alert('Object string representation: ' + {});

如果要立即转换已解析的数据,通常只使用 reviver 函数。你可以这样做:

var obj = JSON.parse(json);

然后遍历对象或直接访问其属性。查看访问/处理(嵌套)对象、数组或 JSON以获取更多信息。

于 2013-08-10T15:08:28.017 回答