Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在某些代码完成执行后延迟$ajax调用_Javascript_Ajax - Fatal编程技术网

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

Javascript 在某些代码完成执行后延迟$ajax调用,javascript,ajax,Javascript,Ajax,我试图获取地理位置数据,然后将该数据合并到$ajax调用URL中。但实际情况是,两个console.loglat/lon调用都返回初始值0。这意味着geolocation调用太晚了,无法返回,$ajax调用只是使用默认值进行的,如下所示: 我通过在$ajax调用中添加一个任意超时函数来解决这个问题,但是如果调用需要1000或10000ms以上的时间才能返回呢? 因此,我的问题是,是否有更优雅的解决方案,仅在地理位置代码完成执行时调用$ajax?在navigator.geolocation.get

我试图获取地理位置数据,然后将该数据合并到$ajax调用URL中。但实际情况是,两个console.loglat/lon调用都返回初始值0。这意味着geolocation调用太晚了,无法返回,$ajax调用只是使用默认值进行的,如下所示:

我通过在$ajax调用中添加一个任意超时函数来解决这个问题,但是如果调用需要1000或10000ms以上的时间才能返回呢? 因此,我的问题是,是否有更优雅的解决方案,仅在地理位置代码完成执行时调用$ajax?

在navigator.geolocation.getCurrentPosition中调用ajax函数

var-lat=0; var-lon=0; 函数getWeatherData{ if navigator.geolocation{ navigator.geolocation.getCurrentPositionfunctionpos{ 纬度=位置坐标纬度; lon=位置坐标经度; $.ajax{ 网址:http://api.openweathermap.org/data/2.5/weather?lat= +lat+&lon=+lon+&appid=9011468f93d0dac073b28cda9e83cd01, 成功:函数数据{ 控制台日志数据; }, 错误:函数{ console.logREKT; } }; }; } } $document.readyfunction{ 获取天气数据; };
将调用移动到getCurrentPosition的回调

附加值:如果地理位置不存在,它不会调用getWeatherData。现在你总是叫它

$(function() { 
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(pos){ 
     lat = pos.coords.latitude; 
     lon = pos.coords.longitude; 
     getWeatherData(); 
   });
  }
});

还有这个:

我之所以选择这个作为答案,仅仅是因为它是一个更模块化的解决方案。我试着写一些代码只是为了更仔细地观察数据流:所以,即使初始化。。。先开火,成功!仅在启动getWeatherData后记录。我对编码有点陌生,但根据这一点:回调函数被调用,直到它,嗯,调用回名字,其他代码继续执行。成功仅在函数回调时执行?总之,回调函数本质上是异步的——它们是异步调用的结果。
$(function() { 
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(pos){ 
     lat = pos.coords.latitude; 
     lon = pos.coords.longitude; 
     getWeatherData(); 
   });
  }
});