嗨,我正在尝试学习如何使用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文件呢?谢谢你的帮助
答案 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.
}