2017-07-05 505 views
0

我正在使用Google Maps APIrails 5.0.4在AJAX請求完成之前Google地圖加載完成

我希望地圖以用戶位置爲中心,並用座標填充緯度,經度字段。目前,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(); 
     }; 

}); 

回答

0

從文檔就緒包裝中移動initMap()函數。經緯度/長度設置後直接調用initMap。

讓它在文檔就緒包裝器中將調用在頁面加載時初始化映射,這是你不想要的。

+0

謝謝馬克。我將initMap移動到包裝器之外,現在直接調用它。但是,我設置地圖的方式是使用從用戶模型中讀取的中心座標進行初始化。所以我想要完成AJAX請求,確保在地圖加載之前更新用戶模型。 目前,在更新模型之前,地圖仍然會加載。 – Jason

相關問題