我目前正在使用一个setInterval
函数来“监听”要设置的“就绪”变量,使用多个 Google Geocoder 回调。
我想知道是否有更“合法”或更有效的方法来做到这一点,也许使用 jQuery Deferred Object 或 .ajaxStop()。
我只是不知道这些是如何工作的,或者它们是否与 Google Geocoder API 和回调函数兼容。
所以目前我正在设置 var,geocodeReady
一旦true
所有地理编码完成,然后每 1000 毫秒设置一个间隔函数来检查是否geocodeReady
设置为 true。
有没有更有效/更快/简洁的方法来做到这一点?
谢谢!
var geocoder = new google.maps.Geocoder();
var addresses = [
['Bondi Beach Australia'],
['Coogee Beach Australia'],
['Cronulla Beach Australia'],
['Manly Beach Australia']
];
var n = addresses.length;
var geocodeReady = false;
for (i = 0; i < addresses.length; i++) {
(function(address){
geocoder.geocode( { 'address': addresses[i][0]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
address.push(results[0].geometry.location.lb);
address.push(results[0].geometry.location.mb);
} else {
alert("Geocode was not successful for the following reason: " + status);
}
if (--n == 0) {
geocodeReady = true;
}
});
})(addresses[i]);
}
var x = 0;
// set a timer to check whether our addresses have geocoded
function checkGeocode() {
if(x === 10) {
clearInterval(geocodeTimer);
}
if(geocodeReady == true) {
clearInterval(geocodeTimer);
for (i = 0; i < addresses.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(addresses[i][1], addresses[i][2]),
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(addresses[i][0]);
infowindow.open(map, marker);
}
})(marker, i));
}
}
x++;
}
var geocodeTimer = setInterval(checkGeocode, 1000);
geocodeTimer;