我有一个从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()
});
}
由于某种原因,我认为它是因为异步调用...我可以解决这个问题吗?
答案 0 :(得分:2)
看起来它将它存储在全局变量“myLocation”中。但是,您可能在实际设置之前尝试读取该值。异步调用的工作方式是它立即返回,然后在将来的某个时候,它将在请求获得响应时调用回调函数。其余的代码将在此期间继续运行。
在分配到myLocation后尝试“提醒”以查看是否正在填充:
myLocation = new google.maps.LatLng(data.geoplugin_latitude, data.geoplugin_longitude)
alert(myLocation)