javascript异步范围

时间:2013-08-25 19:22:19

标签: javascript google-maps-api-3

我开始学习javascript并且正在摆弄gps。目前,我遇到了一个功能范围问题。

代码

$(document).ready(function () {
    var lat, lng;

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            $(document).data('lat', position.coords.latitude); //undefined outside
            lat = position.coords.latitude; //undefined outside
            lng = position.coords.longitude; //undefined outside
        });
    }

    var coords = new google.maps.LatLng(lat,lng); //lat & lng are undefined
});

问题在于,不保留我在getCurrentPosition调用的函数的局部范围内赋值的值。处理此问题的最佳做法是什么。我假设它只是返回一个包含数据的对象,但我究竟是怎么做到的?我试过这样做,但它仍然无法正常工作

1 个答案:

答案 0 :(得分:3)

好吧,由于上面的两条评论,我想通了。问题不是范围问题,而是异步问题。请参阅stackoverflow.com/q/14220321/218196

$(document).ready(function () {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(success, error, { maximumAge: 75000 });
    }

    function success(position) {
        var coords = new google.maps.LatLng(
            position.coords.latitude,
            position.coords.longitude);
        initMap(coords);
    }

    function error(err) {
        //coordinates of LA
        initMap(new google.maps.LatLng(34,118));
    }


    function initMap(coords) {
       //logic here 
    }
});