如何阻止javascript函数(轮询)多次执行?
我有一个如何阻止javascript函数(轮询)多次执行?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个poll()函数: $("document").ready(function(){ poll(10); $("#refresh").click(function(){ poll(10); }); }); function poll(timeout){ return setTimeout(function(){ if (timeout == 10){ timeout = 10000; } $.ajax({ url:
poll()
函数:
$("document").ready(function(){
poll(10);
$("#refresh").click(function(){ poll(10); });
});
function poll(timeout){
return setTimeout(function(){
if (timeout == 10){
timeout = 10000;
}
$.ajax({ url: "/ajax/livedata.php", success: function(data){
$("#result").html(data);
poll(timeout);
}, dataType: "json"});
}, timeout);
}
那么,那里发生了什么:
1) 在页面加载时,调用poll()
,循环开始执行
2) 在#刷新
单击时,此时会调用poll()
,以立即请求新数据
问题:每当我点击#刷新
请求新数据时,poll()
会再次调用,但会触发多次(第一次+每次新点击)。因此,它不是像预期的那样每10秒触发一次,而是每10秒触发多次(取决于我点击#refresh
)
如何修复此问题,以便每当我单击“刷新”时,只剩下一个实例循环?首先将
设置超时
对象存储到类似以下的变量中
var a = poll(10);
$("document").ready(function(){
var a = null;
$("#refresh").click(function(){
if(a != null){
clearTimeout(a);
a = null;
}
a = poll(10);
});
});
然后使用此代码单击“刷新”后停止
clearTimeout(a);
所以会是这样
var a = poll(10);
$("document").ready(function(){
var a = null;
$("#refresh").click(function(){
if(a != null){
clearTimeout(a);
a = null;
}
a = poll(10);
});
});
参考:
这看起来正是我所需要的,只是出于某种原因,clearTimeout(a)无法销毁setTimeout对象。@RiMMER可能@Mahan正在考虑
setInverval
/clearInterval
@RiMMER请检查我放置的引用