从php服务器读取json

Read json from php server

本文关键字:json 读取 服务器 php      更新时间:2023-09-26

我想使用类似的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??

如何解决这一问题,感谢

如果您使用的是普通的javascript,您希望循环遍历对象的属性,您可以用for in语句在javascript中执行此操作。

<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>

来自关于JSON.parse:的MDN文档

reviver最终使用空字符串和最顶端的值进行调用,以允许转换最顶端的数值。

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

这里有一个更简单的例子:

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

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

var obj = JSON.parse(json);

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