繁体   English   中英

Javascript GeoLocation中的变量范围不起作用

[英]Variable Scope in Javascript GeoLocation not Working

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

    <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警报中的值不显示。 我该如何解决..

提前致谢..

因为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"

获取地理位置信息是一个异步过程,您应该通过回调来完成此类工作。

例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM