在Javascript中读取PHP编码的JSON

时间:2011-07-20 16:51:38

标签: php javascript ajax json

我使用json_encode在php中创建了一个JSON对象,并尝试通过AJAX在javascipt中显示该对象的某些值。我没有收到来自php的响应的问题,但是当我尝试使用JSON表示法访问响应的任何值时,我得到'undefined'。

代码段:

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
   var response = xmlhttp.responseText;
   alert(response);
   alert(response.data);
}

输出:

{"data":[{"cheese":"pork"},{"cheese":"chicken"}]} // Yes, I'm hungry right now.
undefined

编辑:感谢大家的回复。希望我能给你一个复选标记,但我选择了最有帮助的回复。

5 个答案:

答案 0 :(得分:2)

你必须解析json。这可以通过对eval的简单调用来完成,但只有在您完全信任返回的服务器时才能这样做,因为他可以让您的脚本执行所有操作。

 var data = eval('('+response+')');

我建议使用json2.js的方式,这是一个较快的小javascript库,可以为你处理解析。

var data = JSON.parse(response);

可以从https://github.com/douglascrockford/JSON-js

获取

答案 1 :(得分:1)

您需要解析JSON:

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
   var jdoc = JSON.parse(xmlhttp.responseText);
   alert(jdoc.data[0].cheese);
}

在旧浏览器中加入json2.js

答案 2 :(得分:1)

您必须将响应转换为js对象。

最简单的方法是使用eval():

eval('var result = ' +response);
alert(result.data);

答案 3 :(得分:1)

var response = xmlhttp.responseText

这不是JSON对象。这是纯文本。 例如,使用var myObject = eval('(' + myJSONtext + ')');来获取JSON(eval是邪恶的:)

答案 4 :(得分:1)

看起来响应是纯文本。 试试这个:

var response = xmlhttp.responseText;
var data = new Function("return "+xmlhttp.responseText)();