我有一个计时器,以及每次用户点击某些按钮时检索数据的函数。避免快速连续检索数据
所以我有一个计时器
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()的请求,就像我按下按钮一样。
所以我的计时器不起作用。这是怎么回事??
您当前的实现不起作用是因为您正在清除doTheThing(data)
中的超时。每个ajax请求都有延迟。因此,如果您快速点击,clearTimeout
将在任何setTimeout
注册之前被调用,并且基本上什么都不做。
考虑将它移动到你的getMoreData
方法,sample
function getMoreData(){
clearTimeout(timer);
timer = setTimeout(...)
//Your other ajax
}