我有一个页面,目前每10秒刷新一次。该页面运行一系列数据库查询并显示结果。
问题在于,有时查询需要一分钟才能运行,但页面仍然每10秒刷新一次,因此我最终会运行6组数据库查询,依此类推。我知道这一点,因为我使用查询的开始和结束时间记录数据库中的操作。
$(document).ready(function() {
var refreshId = setInterval(function() {
$("#content").load('myurl.php?id=1');
}, 10000);
});
如何更改它以便刷新仅在页面处理完查询时或10秒内以最长者为准?
答案 0 :(得分:2)
为什么不设置一个标志并跳过重新加载,如果最后一个尚未完成?类似下面的内容(未经测试但显示基本想法)
var loading = false;
var refreshId = setInterval(function() {
if (loading)
return;
loading = true;
$("#content").load('myurl.php?id=1', function() {
loading = false;
});
}, 10000);
});
答案 1 :(得分:1)
您可以使用setTimeout
代替并在完成时重新加载计时器
答案 2 :(得分:1)
不是定期刷新页面,而是通过AJAX调用获取数据,并在完成时重新安排刷新。
在伪代码中:
// Set initial timeout, 10 seconds
var refTimeout = setTimeout(refreshData, 10000);
function refreshData ()
{
// Remove timeout, we won't be called again until AJAX call is complete
clearTimeout (refTimeout);
$.ajax ({url: 'mydatasource.php', data : { ... },
success : function (data) {
// Render data into content area...
// Set timeout so we'll be called again in 10 seconds
refTimeout = setTimeout (refreshData, 10000);
}
});
}
答案 3 :(得分:0)
您可以使用AjaxQueue等插件对ajax请求进行排队。