在 AJAX 请求完成之前加载 Google 地图

Posted

技术标签:

【中文标题】在 AJAX 请求完成之前加载 Google 地图【英文标题】:Google maps loading before AJAX requests complete 【发布时间】:2017-07-05 15:41:23 【问题描述】:

我正在使用 Google Maps APIrails 5.0.4

我希望地图以用户位置为中心,并用坐标填充纬度、经度字段。目前,lat, lng 字段填充正确,但地图在异步调用完成之前加载,导致地图位置与坐标不匹配。它确实在刷新后自行修复,但在第一次加载时,异步是一个问题。我试图用一个承诺来设置它,但无法让它发挥作用。

最好的方法是什么?

$(document).ready(function()

      function getUserCoordinates() 
        if (navigator.geolocation) 
          navigator.geolocation.getCurrentPosition(setCoords);
        ;
      ;

      function setCoords(position) 
        lat = position.coords.latitude;
        lng = position.coords.longitude;
        updateUserLat(lat);
        updateUserLng(lng);
        document.getElementById("latitude").value = lat.toFixed(6);
        document.getElementById("longitude").value = lng.toFixed(6);
      ;

      function updateUserLat(lat) 
        $.ajax(
          type: 'PATCH',
          url: '/users/:id',
          data: 'user[latitude]': lat
        );
      ;
      function updateUserLng(lng) 
        $.ajax(
          type: 'PATCH',
          url: '/users/:id',
          data: 'user[longitude]': lng
        );
      ;

      getUserCoordinates();

      function initMap()
          initialize();
      ;

);

【问题讨论】:

【参考方案1】:

从文档就绪包装器中移动 initMap() 函数。设置纬度/经度后直接调用 initMap。

将它放在文档就绪包装器中将在页面加载时调用以初始化地图,这是您不想要的。

【讨论】:

谢谢马克。我将 initMap 移到了包装器之外,现在直接调用它。但是,我设置地图的方式是使用从用户模型中读取的中心坐标进行初始化。所以我希望 AJAX 请求完成,确保在地图加载之前用户模型已经更新。所以目前,地图仍然在模型更新之前加载。

以上是关于在 AJAX 请求完成之前加载 Google 地图的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在响应完成之前读取 AJAX 请求?

在显示 jQuery Mobile 页面之前让 Google 地图正确加载

在灯箱点击之前不要加载 iFrame Google 地图

Google Maps Flutter:加载地图之前出现黑屏

通过 AJAX 加载 Google Maps API,控制台错误

谷歌地图ajax和php