在javascript中设置内部作用域的外部作用域变量

时间:2011-04-07 21:11:25

标签: javascript jquery

var lat = 0.0;
var lng = 0.0;
var jsonData = null;
var geocoder = new google.maps.Geocoder();
var miles = $('#milesAway').val();

// find what the user is locating by
if ($('#zipCode').is(':visible'))
{
    var zipText = $('#zipCode').val();
    if (isValidUSZip(zipText))
    {
        geocoder.geocode( {
            'address': zipText
        }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                lat = results[0].geometry.location.lat();
                lng = results[0].geometry.location.lng();
                map.setCenter(results[0].geometry.location);
            } else {
                alert("Zip Code couldn't be located.");
            }
        });
    }
    else
    {
        alert('Please enter a valid US zip code.');
    }
}
在这件事情结束后,

lat和lng仍设为0.0,为什么?我不应该这样设置这些吗?

编辑:我到了应该设置它们的位置,如果我在那里发出警报,我可以看到它们应该设置的值。

1 个答案:

答案 0 :(得分:2)

geocoder.geocode回调没有立即运行,它被推迟到AJAX调用回来之前。范围没有任何问题,变量只有在XHR完成后才会改变。

如果您依赖它们进行更改,请尝试将相关代码(或对函数的调用)放入地理编码器回调函数中。