0

这是一个非常简单的问题,但无法解决,即 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 警报中的值不显示..?? 我该如何解决这个..

提前致谢..

4

2 回答 2

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"
于 2012-10-10T07:17:23.833 回答
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);
});
于 2012-10-10T07:20:16.127 回答