我是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)
...
感谢。
答案 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..
}
这对我有用。非常感谢您的帮助!我真的很感激!