JSON.parse()如何做到这一点?

时间:2013-11-30 04:20:14

标签: javascript php json parsing

所以......我正在尝试使用JavaScript来解析从PHP文件返回的对象。相关代码如下所示:

var name = document.getElementBId("name").value;
var XHR = new XMLHttpRequest();
XHR.open("GET', 'lookup.php?name=' + name, true);

XHR.onreadystatechange = function (){
    try{
        alert("Attempting to parse");
        if ((XHR.readyState === 4) && (XHR.status === 200)) {
            alert("Parsing");
            var jsonresponse = JSON.parse(XHR.responseText);
            alert("Is this being skipped?");
        ....

这是返回的php:

{
  "name": ABC Elementary, 
  "addr": 3000 County Road 29 Alberta AL 36720-2817, 
  "county": Wilcox, "district": 6;
}

该程序应该为数学锦标赛提交学校名称,并在选择其名称后使用其余信息显示学校的地址,县和地区。我选择了ABC Elementary作为调试器,因为它很容易输入。

不幸的是,脚本不会超过这一点。我收到了alert("Parsing")的提醒,但未收到来自alert("Is this being skipped?")的提醒。我在XML.onreadystatechange()内没有得到任何超过这一点的内容,尽管我仍然会收到来自区外的警报。

我的猜测是它与JSON.parse()处理数据的方式有关,或者至少与该行有关。

另外,我知道其他人已经问过这个问题了,我一直在寻找这些答案,但似乎没有人知道JSON.parse()对这些数据究竟做了什么。如果有人能够启发我,我将非常感激。

2 个答案:

答案 0 :(得分:0)

根据我的理解,JSON.parse()接受一个字符串值,一个字符串化的对象并解析它。

要使JSON.parse()适合您的情况,我们希望返回的对象为:

{"name": "ABC Elementary", "addr": "3000 County Road 29 Alberta AL 36720-2817", "county": "Wilcox", "district": "6"}

...但我们希望用字符串包装作为解析的输入。

将此行添加到您的控制台并按Enter键,您将看到解析的结果:

JSON.parse('{"name": "ABC Elementary", "addr": "3000 County Road 29 Alberta AL 36720-2817", "county": "Wilcox", "district": "6"}');

有关详细信息,请参阅可能能够更好地解释它的documentation

答案 1 :(得分:0)

{
  "name": ABC Elementary, 
  "addr": 3000 County Road 29 Alberta AL 36720-2817, 
  "county": Wilcox, "district": 6; /* the ; here must delete */
}

如果这是你的json字符串。格式错误(见上面的评论)

你可以使用alert(xhr.responseText)或console.log(xhr.responseText)来确保你获得json

你想要的字符串。

打开浏览器调试工具以检查控制台消息,

如果您使用旧浏览器,则不支持JSON.parse

你可以在这里阅读

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FJSON#Browser_compatibility

https://github.com/douglascrockford/JSON-js