我在将数据存储在javascript全局数组中时遇到问题。我无法弄清楚为什么数组是空的,即使我已经为它分配了一些元素。
基本上我有两个函数:只要用户单击一个按钮并从JSON中的url获取一些信息,就会调用loadMarkers
,解析该数据并将其存储在全局数组中。另一个函数是showMarkers
,只是迭代数组并显示所有标记,但该数组为空!
提前解决。
var markers = [];
function loadMarkers(url) {
markers = [];
$.get(url, function(data) {
var json = jQuery.parseJSON(data);
for (var i = 0; i < json.length; i++) {
// parsing json
var lat = json[i].Latitude;
var lng = json[i].Longitude;
var id = json[i].ID;
console.log(id); // this prints with no problems!
// create new marker
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
title: id,
html: "<p>" + "Info for container " + id + "</p>"
});
// add marker to markers array
markers.push(markers[i]);
// add info window to marker
google.maps.event.addListener(marker, "click", function() {
infoWindow.setContent(this.html);
infoWindow.open(map, this);
});
}
});
}
function showMarkers() {
for (i = 0; i < markers.length; i++)
console.log(markers); // here I get an empty array!
markers[i].setMap(map);
}
答案 0 :(得分:4)
看起来像这一行:
markers.push(markers[i]);
应改为:
markers.push(marker);
答案 1 :(得分:2)
可能是以下代码
// add marker to markers array
markers.push(marker); // was markers[i]
关于注释中的第二个问题,$.get()
方法返回一个jQuery延迟对象,它允许您在方法完成后执行函数。
$.get().done( function( ) {
// your code
});
答案 2 :(得分:1)
代码中有一个拼写错误:
markers.push(markers[i]);
应该是:
markers.push(marker);
通过查看代码来发现这种拼写错误是非常困难的(就像我们的大脑经过培训让我们阅读我们期望阅读的内容一样)...在这种情况下,最好的方法是快速找到这些一种错误是在代码中添加debugger;
指令,并通过您选择的devtools执行程序。