由于异步查询和变量范围问题,代码无法正常工作。我不明白如何解决这个问题。使用 async:false 更改为 $.ajax 方法 - 不是一个选项。我知道闭包,但我如何在这里实现它 - 不知道。我已经在这里看到了有关 js 中的闭包和 jQuery 异步问题的所有主题 - 但仍然一无所获。请帮助。
这是代码:
var map = null;
var marker;
var cluster = null;
function refreshMap()
{
var markers = [];
var markerImage = new google.maps.MarkerImage('/images/image-1_32_t.png', new google.maps.Size(32, 32));
$.get('/get_users.php',{},function(data){
if(data.status == 'error')
return false;
var users = data.users; // here users.length = 1 - this is ok;
for(var i in users)
{
//here I have every values from users - ok
var latLng = new google.maps.LatLng(users[i].lat, users[i].lng);
var mark = new google.maps.Marker({
position: latLng,
icon: markerImage
});
markers.push(mark);
alert(markers.length); // length 1
}
},'json');
alert(markers.length); // length 0
//if I have alert() above - I get result
cluster = new MarkerClusterer(map, markers,
{
maxZoom: null,
gridSize: null
});
}
Thanks.
只需移动这段代码:
cluster = new MarkerClusterer(map, markers,
{
maxZoom: null,
gridSize: null
});
进入回调函数(第一个警报所在的位置)
问题是,对于异步请求,即使请求尚未完成,代码也会继续执行。所以你的markers
在执行匿名回调函数之前,变量不会正确设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)