我正在尝试使用Google Maps API从邮政编码中获取城市名称。这不是我的力量(我更像是一个PHP人员),所以我使用的是我发现的示例代码,并由朋友建议进行一些修改。
问题是,在我调用函数后,我的全局变量与城市名称的初始值仍为null。但是,如果我使用此值进行警报,则其余处理突然加载了正确的值!我试图延迟时间来看看谷歌是否只是缓慢地返回值,但它没有任何区别。
这是功能:
var geocoder = new google.maps.Geocoder();
function getGoogleAddress(zipcode) {
//var gcity = "N/A"; switch to using global var defined above
geocoder.geocode( { 'address': zipcode}, function (result, status) {
for (var component in result[0]['address_components']) {
for (var i in result[0]['address_components'][component]['types']) {
if (result[0]['address_components'][component]['types'][i] == "locality") {
gcity = result[0]['address_components'][component]['short_name'];
break;
}
}
}
});
}
这就是从...中调用的地方......包括警报和暂停:
gcity="";
getGoogleAddress(form.zip.value);
var holdcity = gcity;
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < 2000);
alert(gcity);
正如我所说,警报返回null,但其余处理在gcity中具有正确的城市名称。如果我省略警报,其余的处理将失败,因为gcity为空。
非常感谢任何建议或建议。感谢。
答案 0 :(得分:1)
异步。
function (result, status) {
仅在Google的服务器响应时执行。 getGoogleAddress
函数的其余部分不等待,但退出,Javascript继续在var holdcity = gcity
执行。
alert
之后的原因是,到那时谷歌将会做出回应,并且gcity变量将被执行。
可能的解决方案:
var geocoder = new google.maps.Geocoder();
function getGoogleAddress(zipcode, successFunction) {
//var gcity = "N/A"; switch to using global var defined above
geocoder.geocode( { 'address': zipcode}, function (result, status) {
for (var component in result[0]['address_components']) {
for (var i in result[0]['address_components'][component]['types']) {
if (result[0]['address_components'][component]['types'][i] == "locality") {
var gcity = result[0]['address_components'][component]['short_name'];
successFunction(gcity);
break;
}
}
}
});
}
这就是从...中调用的地方......包括警报和暂停:
getGoogleAddress(form.zip.value, function (holdcity) {
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < 2000);
alert(holdcity);
});