我有一个从MySQL数据库中读取的网站,并在地图上显示最新数据。如何在网站上每秒刷新一次数据?我需要将我的AJAX代码放入计时器吗?查询数据库的PHP脚本是否需要在计时器上?
var geojson;
$(document).ready(function () {
var a = $(this).val();
console.log(a)
$.ajax({
type: "POST",
url: "b.php",
async: false,
data: {c: a},
datatype: 'json',
success: function (d) {
var e = JSON.parse(d);
geojson = e;
new L.GeoJSON(e);
L.geoJSON([e], {
onEachFeature: onEachFeature,
pointToLayer: function (feature, latlng) {
return L.circleMarker(latlng, {
fillColor: "#ff0505",
fillOpacity: 1,
radius: 5,
weight: 1
});
}
}).addTo(mymap);
}
})
});
答案 0 :(得分:0)
我建议删除async:false
选项,因为使用同步AJAX调用不是一个好习惯。
然后,您可以在执行请求之前跟踪时间,并在完成时,并相应地计算超时:
var func = function(){
var interval=5000;
var start = new Date();
$.ajax({})
.always(function(){
var end = new Date();
var timeout = interval - (end-start)
var timeout = timeout < 0 ? 0 : timeout;
setTimeout(func, timeout);
});
};
func();
您也可以使用lodash
中的_.throttle。
var func = _.throttle(function(){
$.ajax({....})
.always(function(){
func();
});
}, 5000);
func();
在上述两种情况下,请求将每5秒执行一次,或者在请求完成时执行(如果持续时间超过5次)。
答案 1 :(得分:-1)
您可以比较最新数据的数据并使用
import re
result = [[int(num) for num in match.groups()] for match in re.finditer(r'(\d+) (\d+)', text)]
# [[0, 1], [1, 5], [1, 8], [1, 10], [2, 5], [2, 7], [2, 4], [3, 4], [4, 9], [5, 6]]