加载变量时Google Maps API延迟

时间:2011-07-12 12:34:14

标签: javascript google-maps

我正在尝试使用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为空。

非常感谢任何建议或建议。感谢。

1 个答案:

答案 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);
    });