jquery回调不使用全局变量

时间:2011-01-22 21:04:44

标签: javascript jquery

我有一个从geoplugin获取位置的小脚本...我想将返回的co-ords存储在我已全局声明的变量中...但由于某种原因,回调不会读取它。如何使回调使用全局变量?

if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        myLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
    }, function() {
        noLocation();
    },{timeout: 20});
}
else if (google.gears) {
    var geo = google.gears.factory.create('beta.geolocation');
    geo.getCurrentPosition(function(position) {
        myLocation = new google.maps.LatLng(position.latitude,position.longitude);
    }, function() {
        noLocation();
    });
}
else {
    noLocation();
}
function noLocation() {
$.getJSON("http://www.geoplugin.net/json.gp?id=117.201.92.17&jsoncallback=?",
    function(data) {
        if (data != "" && data.geoplugin_latitude != "")
            myLocation =  new google.maps.LatLng(data.geoplugin_latitude, data.geoplugin_longitude)
        else
            myLocation = new google.maps.LatLng()
    });

}

由于某种原因,我认为它是因为异步调用...我可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

看起来它将它存储在全局变量“myLocation”中。但是,您可能在实际设置之前尝试读取该值。异步调用的工作方式是它立即返回,然后在将来的某个时候,它将在请求获得响应时调用回调函数。其余的代码将在此期间继续运行。

在分配到myLocation后尝试“提醒”以查看是否正在填充:

myLocation =  new google.maps.LatLng(data.geoplugin_latitude, data.geoplugin_longitude)
alert(myLocation)