我正在尝试获取地理位置数据,然后将该数据合并到 $ajax 调用 URL 中。但发生的情况是,两个 console.log(lat/lon) 调用都返回初始值 (0)。这意味着地理位置调用来得太晚而无法返回,并且 $ajax 调用只是使用默认值进行,如下所示: http://api.openweathermap.org/data/2.5/weather?lat=0&lon=0&appid=9011468f93d0dac073b28cda9e83cd01 ”
var lat = 0;
var lon = 0;
console.log(lat);
console.log(lon);
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(pos){
lat = pos.coords.latitude;
lon = pos.coords.longitude;
})
}
function getWeatherData() {
console.log(lat);
console.log(lon);
setTimeout(function(){
$.ajax({
url: "http://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&appid=9011468f93d0dac073b28cda9e83cd01",
success: function (data) {
console.log(data);
},
error: function () {
console.log("REKT");
}
})
}, 1000);
}
$(document).ready(function () {
getWeatherData();
});
我通过向 $ajax 调用添加任意超时函数来解决这个问题,但是如果调用需要超过 1000 或 10000 毫秒才能返回怎么办? 所以,我的问题是是否有一个更优雅的解决方案使 $ajax 仅在地理定位代码完成执行时调用?
最佳答案
将调用移至 getCurrentPosition 的回调
附加值:如果地理位置不存在,则不会调用 getWeatherData。现在你总是这样调用它
$(function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(pos){
lat = pos.coords.latitude;
lon = pos.coords.longitude;
getWeatherData();
});
}
});
还有这个:https://developers.google.com/web/updates/2016/04/geolocation-on-secure-contexts-only
关于javascript - 在某些代码完成执行后延迟 $ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41868722/