尝试保存响应文本以访问对象字段时,JSON.parse返回错误。

时间:2017-05-04 02:00:26

标签: javascript jquery json ajax rest

我是Javascript和Ajax的新手。我试图编写一些代码,其中我解析HTTP请求的JSON响应,然后访问响应对象中的不同元素。但我一直遇到两个不同的错误。我尝试了解堆栈溢出的各种解决方案,但我还没有能够让它们工作。任何帮助将不胜感激。

 var xhttp = new XMLHttpRequest();
 xhttp.onreadystatechange = function() {
   if (this.readyState == 4 && this.status == 200) {
     var json = JSON.parse(this.responseText);
       document.getElementById("lola1").innerHTML = json;
       initMap(json);
     }
 };

我想只从响应对象传入结果数组。但是,如果我这样做,页面显示是" [object Object]"

当我尝试在initMap方法中执行JSON.parse时,我在JSON.parse上出现语法错误

SyntaxError: JSON Parse error: Unexpected identifier "undefined"

if (this.readyState == 4 && this.status == 200) {
  var json = this.responseText;
  initMap(json);
}


function initMap(response_val) {  

    // Process input results
    document.getElementById("lola1").innerHTML = JSON.parse(response_val)
    ...

感谢。

3 个答案:

答案 0 :(得分:0)

问题是您正在尝试将innerHTML设置为对象。 innerHTML只能是一个字符串,因此它会尝试将您的对象强制转换为字符串。如果您真的想要显示整个responseText,可以简单地document.getElementById("lola1").innerHTML = this.responseText;

我做了一个示例,以进一步说明设置对象的innerHTML与对象的字符串表示形式的对应关系: https://jsfiddle.net/tuqd9x8k/

答案 1 :(得分:0)

您可以尝试使用

记录信息
console.log(this.responseText);
console.log(json.parse(this.responseText));

您将看到两者之间的差异,并更好地可视化您的响应数据。

答案 2 :(得分:0)

我设法在我的代码中解决了这个问题。 @ jas7457是对的,将innerHTML设置为对象导致问题。我不确定它的样子。但我把它打印到console.log。

代码现在看起来像

var response = JSON.parse(this.responseText);

    // error checking
        if (!response.results || !response.results.length) {
          console.log("No results");
          return;
        }

        // there should only be one object in the result array
        var result = response.results[0];
        console.log(result);

   if (result.businesses) for (var i=0; i < result.businesses.length; i++) {
        parse the nested son businesses object in the results.. 
  }

这对我有用。非常感谢您的帮助!我真的很感激!