我目前正在处理一个页面,该页面最终会将一系列标记(它们的数据来自 JSON 对象)绘制到 Google map 上。
我似乎无法配置出保持标记数组填充的方法。由于超出了 getJSON 调用的范围,该数组为空。
var markers = [];
var map;
var mapOptions = {
center: new google.maps.LatLng(0.0, 0.0),
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
$.getJSON("Home/GetLocations", function (data) {
for (index in data) addMarker(data[index]);
function addMarker(_data) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(_data.lat, _data.lng),
map: map,
title: _data.name
});
markers.push(marker);
}
//markers = 3 at this point.
});
// markers = 0 at this point.
我需要数组仍然被填充的原因是我打算为页面上的每个标记创建一个超链接,以便可以单击它并且 map 缩放到正确的标记。理想情况下,这将是一个带有 javascript 函数调用的超链接,该 javascript 函数将作为参数传递所选超链接的标记索引,允许我去例如
function zoomIn(selectedIndex) {
map.setCenter(markers[selectedIndex].getPosition());
}
但此时,markers 数组是空白的,因此不再包含每个标记。
如果有人能给我指出正确的方向,那就太好了。谢谢
最佳答案
getJSON 调用中指定的函数将在 getJSON 完成时调用,这不一定是使用标记数组的代码运行时。我想如果你把对 zoomIn 的调用(或任何需要使用标记的东西)放在 getJSON 调用中指定的函数中,标记将在使用它时被填充。关键是标记数组是异步填充的,所以你需要确保代码执行的顺序。
如果您在调用 getJSON 后立即检查标记数组,请不要这样做。检查使用它的 zoomIn 函数中的标记数组。
关于javascript - Javascript 中的全局数组范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12438529/