这是一个调用Google Maps获取地理编码的程序,但是我发现for循环的执行过程很诡异,总是先执行alert(locationArr);打印一个空的数组,然后再执行codeAddress函数得到正确的编码,谁能告诉我这种违反我的常识的情况是怎么来的?如何解决呢?
for(j=0;j<stationNum;j++){
locationArr[j]=codeAddress(stationArr[j]);
}
alert(locationArr);
function codeAddress(addressStr){
var geocoder = new google.maps.Geocoder();
var reLocation=new google.maps.LatLng();
geocoder.geocode( { 'address': addressStr}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
reLocation=results[0].geometry.location;
} else {
reLocation=null;
}
});
alert(reLocation);
return reLocation;
}
javascript
google?maps
------解决方案--------------------
var j = 0;
function codeAddress(addressStr) {
var geocoder = new google.maps.Geocoder();
var reLocation = new google.maps.LatLng();
geocoder.geocode({ 'address': addressStr }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
locationArr[j] = results[0].geometry.location;
} else {
locationArr[j] = null;
}
//单个地址解码后操作这个地址对应的代码放这里来
j++;
if (j < stationArr.length) codeAddress(stationArr[j]);
else{ 如果是对locationArr进行整体操作要放这里}
});
}
codeAddress(stationArr[j]);