Javascript GeoLocation中的可变范围无法正常工作

时间:2012-10-10 07:04:11

标签: javascript scope

这是一个非常简单的问题,但无法解决,即javascript中的变量范围,因为geoLocation值不起作用。这是我的代码:

    <script type="text/javascript">


        var glat;
        var glng;
        var test = "Hiii";
    function call(){
                var lat;
                var lng;
                var geocoder = new google.maps.Geocoder();
                var address = "Delhi";
                geocoder.geocode( { 'address': address}, function(results, status) {

                if (status == google.maps.GeocoderStatus.OK) {
                    lat = results[0].geometry.location.lat();
                    lng = results[0].geometry.location.lng();
                    } 

            glat = lat;
            glng = lng;
            alert("In: "+glat + glng+ "Test: "+test);
            //All Values Displayed Fine..
            }); 
        alert("OUT: "+glat + glng+ "Test: "+test);
        //glat and glng displayed as undefined..

    }
</script>

为什么,OUT警告中的值不显示.. ??我该怎么解决这个问题..

先谢谢..

2 个答案:

答案 0 :(得分:0)

因为geocoder.geocode([object],[callback]);将一个函数作为第二个参数,它被称为异步:因此glatglng变量不会被设置为请求完成,并返回回调函数。您的代码段的基本流程如下:

declare variables
declare function [call]
    local variables for function
    make async request
    alert "out" + glat + glen //Just after request is sent, not after it's completed
    [call] returns
//time passes
       on successful completion of request://<--refs back to request set in [call]
           set variables glat and glng
           alert "In"

答案 1 :(得分:0)

获取地理信息是一个异步过程,您应该使用回调执行此类工作。

示例:

function call(address, callback) {
    new google.maps.Geocoder().geocode({
        'address': address
    }, function (results, status) {
        var lat, lng;
        if (status == google.maps.GeocoderStatus.OK) {
            lat = results[0].geometry.location.lat();
            lng = results[0].geometry.location.lng();
        }
        callback(lat, lng);
    });
}

//usage:
call("Delhi", function (glat, glng) {
    // if you still get undefined, it means the status is not OK.
    alert("OUT: " + glat + glng);
});