我有一个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代码中更新相同的纬度/经度?真实的例子将是真正的赞赏。
答案 0 :(得分:2)
克里斯说的是正确的。您想要从服务器动态更新值。现在将代码放在你拥有它的地方只是在加载页面时,你需要使用AJAX请求来向服务器询问最新的值。
你需要做的是制作另一个只返回纬度和经度的Django视图,JSON是最简单的方式(即以{“纬度”:12.2,“经度”:11.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)
你在这里处理不同的时间点。
lat_long
并将其输入。lat_long
并将其返回给客户端。关键是在AJAX请求返回一个新的请求之前,该页面脚本已经设置了该值。他们在这里并不是真正的竞争对手。如果您想根据lat_long
的新值更改地图中心,请在AJAX成功方法中使用新值调用map.setCenter
。