django + javascript - 如何处理来自不同来源/功能的数据?

时间:2011-06-24 13:33:35

标签: javascript jquery django django-templates django-views

我有一个JavaScript地图,当模板页首次加载时会从django视图/函数中获取一些坐标:

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

我在处理ajax请求的相同views.py文件上还有另一个函数,它执行一些计算并返回应该更新{{lat_long}}标记所在位置的新坐标。

因此,在某种程度上,我应该在页面首次加载时从函数中获取{{lat_long}},并将其替换为新的{{lat_long}},它将来自处理ajax请求的函数。

最好的方法是什么,这样两个函数都可以在上面的javascript代码中更新相同的纬度/经度?真实的例子将是真正的赞赏。

2 个答案:

答案 0 :(得分:2)

克里斯说的是正确的。您想要从服务器动态更新值。现在将代码放在你拥有它的地方只是在加载页面时,你需要使用AJAX请求来向服务器询问最新的值。

你需要做的是制作另一个只返回纬度和经度的Django视图,JSON是最简单的方式(即以{“纬度”:12.2,“经度”:11.1}的形式)。

您的观点将执行以下操作:

  1. 从模型中获取纬度/经度值
  2. Convert to JSON format
  3. 使用render_to_response或其他任何
  4. 返回HTTPResponse对象

    在客户端,这是一个使用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)

你在这里处理不同的时间点。

  1. Django呈现模板,计算lat_long并将其输入。
  2. 已将呈现的页面发送给客户。
  3. 浏览器加载页面和各个内容资源,包括您的AJAX脚本。
  4. AJAX最终运行,从服务器获取新的lat_long并将其返回给客户端。
  5. AJAX请求的成功函数接收数据并对其执行某些操作。
  6. 关键是在AJAX请求返回一个新的请求之前,该页面脚本已经设置了该值。他们在这里并不是真正的竞争对手。如果您想根据lat_long的新值更改地图中心,请在AJAX成功方法中使用新值调用map.setCenter