javascript TypeError:无法从未定义的JSON加载到数组中读取属性“ 0”

时间:2018-10-18 12:38:05

标签: javascript json

嗨,我正在尝试学习如何使用Google Maps,当我将json数据存储在可以正常加载的同一网页上时,我正在通过AJAX将json对象加载到javascript数组中。调用文件时,我得到

TypeError:无法从未定义的JSON加载到数组中读取属性“ 0”

这是JSON(如果未选中)在网页上的外观,它将正常处理

这是我执行AJAX调用的方式,我已将JSON.parse添加到响应文本中。

我知道在控制台中出现错误

意外的令牌,位于JSON中的位置189

所以我的Json不正确,但是我将其从页面复制并粘贴到了文本文件中?

 var xhttp = new XMLHttpRequest();
 xhttp.onreadystatechange = function() {
  if (xhttp.readyState == 4 && xhttp.status == 200) {
markers =  JSON.parse(xhttp.responseText); 
}
};
xhttp.open("GET", "Testdata.json", true);
http.send();

//Array of markers
/*
var markers = [
{
coords:{lat:53.745,lng:-0.338},
iconImage:'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png',
content:'<h1>Lynn MA</h1>'
},
{
coords:{lat:53.747,lng:-0.340},
    iconImage:'https://maps.gstatic.com/mapfiles/ms2/micons/blue.png',
content:'<h1>2 days before exceeds delivery date</h1>'
},
{
coords:{lat:53.750,lng:-0.220},
    iconImage:'https://maps.gstatic.com/mapfiles/ms2/micons/green.png'
}
];
*/

//loop through markers

for(var i = 0;i < 3;i++){
   addMarker(markers[i]);
}

在chrome控制台中,它显示AJAX调用后的JSON。

"   {
"coords":{"lat":"53.745","lng":"-0.338"},
"iconImage":"https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png",
"content":"<h1>Lynn MA</h1>"
},
{
"coords":{"lat":"53.747","lng":"-0.340"},
    "iconImage":"https://maps.gstatic.com/mapfiles/ms2/micons/blue.png",
"content":"<h1>2 days before exceeds delivery date</h1>"
},
{
"coords":{"lat":"53.750","lng":"-0.220"},
    "iconImage":"https://maps.gstatic.com/mapfiles/ms2/micons/green.png"
}
"

AJAX调用必须像控制台显示的那样具有标记的数据,为什么当它在同一页上时为什么要处理JSON文件呢?谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

没有更多代码,很难说出问题所在。

确保在将PHP中的值返回到JSON时将其全部编码。 从调用中获取返回值后,请确保对返回结果执行JSON.parse。

您可以通过简单的检查来调试返回值:

let returnValue = JSON.parse('returned-value from your ajax-call'); console.log(typeof returnValue); // this should be a array and/or object.

如果不使用JSON,则解析返回的结果。 typeof将返回“字符串”作为答案。 祝你好运

答案 1 :(得分:0)

很抱歉,将其发布为答案,但我还不能发表评论,您在问题中缺少一些有助于回答的代码,但看来您的循环并非100%正确。可以肯定的是,undefined的属性0表示i为0的第一次迭代,因此markers [0]是不确定的,因为您的循环是对整数进行循环,从0开始,以2结尾。

for (var i = 0; i >= markers.length; i++){
 addMarker(markers[i]) //assuming addMarker is defined somewhere in your code.
}