javascript - 在某些代码完成执行后延迟 $ajax 调用

标签 javascript ajax

我正在尝试获取地理位置数据,然后将该数据合并到 $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/

相关文章:

javascript - 如何在 javascript 中正确使用 DOM 样式边距顶部属性?

javascript - 传单:不同坐标的不同颜色标记

JavaScript:变量未定义

javascript - 通过 Ajax 更新 textarea 的设置 SelectionStart 属性导致 IE 中出现错误 800a025e

javascript - 由Ajax调用的Python脚本,由Django服务器执行

java - AjaxLink 切换另一个 AjaxLink 的可见性

javascript - AJAX接收多个数据

javascript - 使用当前选项卡更改选项卡标题占位符的名称

php - 删除 div 而不刷新页面

javascript - 调用者无法使用 ajax 从异步方法中获取正确的值