2011-06-24 27 views
0

我有一個JavaScript地圖,需要一些座標從Django視圖/功能,當模板第一次加載頁面像這樣:django + javascript - 如何處理來自不同來源/功能的數據?

<script type="text/javascript">  
... 
map.setCenter(new f.LatLng{{lat_long}}, 11); 
... 
</script> 

我也有同樣的views.py文件處理Ajax請求另一個功能它執行一些計算並返回新的座標,該座標應該更新{{lat_long}}標籤所在的同一個點。

因此,我應該在頁面第一次加載時使{{lat_long}}從函數中消失,並用來自處理ajax請求的函數的新{{lat_long}}替換它。

什麼是最好的方式去這個,所以這兩個函數可以更新上面的JavaScript代碼中相同的緯度/經度?真正的例子將被真正讚賞。

+0

你能解釋一下這個語法:'f.LatLng {{lat_long}}'。如果lat_long是50,它將打印f.LatLng50。或者lat_long是一個列表? – bcoughlan

+0

@waitinforatrain如果它沒有{{lat_long}}標籤,js函數將如下所示:map.setCenter(new f.LatLng(30.12,-97.89),11); – avatar

回答

2

Chris說的是正確的。您想要動態更新服務器的值。現在將代碼放在現有的地方只是在頁面加載時執行,您需要使用AJAX請求來向服務器詢問最新值。

你需要做的是製作另一個剛剛返回經度和緯度的Django視圖,JSON是最簡單的方式(即形式爲{「latitude」:12.2,「longitude」:11.1})。

您的觀點將執行以下操作:從型號

  • Convert to JSON format
  • 返回使用HttpResponse對象選擇render_to_response或任何
  • 在您的客戶端

    1. 獲取緯度/經度值,這裏是一個使用jQuery Javascript庫進行AJAX請求的示例:

      <script type="text/javascript"> 
      
      
      //Run When page first loads 
      map.setCenter(new f.LatLng{{lat_long}}, 11); 
      
      
      var updateLatLng = function() { 
          $.ajax({ 
           type: "GET", 
           url: "/url/to/latlng/view", 
           data: "mapID=7", //Whatever extra parameters you need will go here 
           success: function(data) { 
           //This is run when we get data back from the server, 
           //If you send back the data in JSON format 
           //Then you can access the data using "data.latitude" and "data.longitude" 
           map.setCenter(new f.LatLng(data.latitude, data.longitude}); 
           } 
          }); 
      }; 
      
      //Call updateLatLng every two seconds 
      window.setInterval(updateLatLng , 2000); 
      
      </script> 
      
    1

    你正在處理這裏的不同時間點。

    1. Django的呈現模板,計算lat_long和飼料它。
    2. 渲染頁面發送給客戶端。
    3. 瀏覽器加載頁面和個人內容資源,包括您的AJAX腳本。
    4. AJAX最終運行,從服務器獲取新的lat_long並將其返回給客戶端。
    5. AJAX請求的成功函數接收數據並執行某些操作。

    問題是,在AJAX請求返回一個新值之前,該值已由頁面腳本長時間設置。他們在這裏並不是真正的競爭對手。如果您想根據lat_long的新值更改地圖中心,則只需在您的AJAX成功方法中調用map.setCenter並添加新值即可。

    相關問題