我有一个计时器,以及每次用户点击某些按钮时检索数据的函数。避免快速连续检索数据
所以我有一个计时器
var timer;
然后是一个通过ajax更新内容的函数
function doTheThing(data){
clearTimeout(timer);
$.ajax({
url:'/post/url',
data:data,
}).done(function(data){
timer = setTimeout(function(){
getMoreData();
},2000);
});
}
理论上,这应该在每个请求上启动计时器,但如果用户连续点击按钮以产生多个请求,它将清除最后一个请求,并开始新的。在计时器内部,我有getMoreData(),希望只检索一次,如果用户连续按下按钮2次或更多次。
function getMoreData(){
...another ajax request, which I only really want to fire once,
... if the user presses buttons very fast to trigger that first one
}
但是,这不起作用。我得到了与getMoreData()一样多的请求,因为我按下按钮。
所以我的计时器无效。这是怎么回事??
答案 0 :(得分:0)
您当前的实施无效是因为您正在doTheThing(data)
清除超时。每个ajax请求都有延迟。因此,如果您快速点击,clearTimeout
将在任何setTimeout
注册之前被调用,并且基本上什么都不做。
考虑将其移至getMoreData
方法,sample
function getMoreData(){
clearTimeout(timer);
timer = setTimeout(...)
//Your other ajax
}