setTimeout ajax throttle不工作

问题描述 投票:0回答:1

我有一个计时器,以及每次用户点击某些按钮时检索数据的函数。避免快速连续检索数据

所以我有一个计时器

  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()的请求,就像我按下按钮一样。

所以我的计时器不起作用。这是怎么回事??

javascript ajax timer
1个回答
0
投票

您当前的实现不起作用是因为您正在清除doTheThing(data)中的超时。每个ajax请求都有延迟。因此,如果您快速点击,clearTimeout将在任何setTimeout注册之前被调用,并且基本上什么都不做。

考虑将它移动到你的getMoreData方法,sample

function getMoreData(){
   clearTimeout(timer);
   timer = setTimeout(...)
   //Your other ajax   
}
© www.soinside.com 2019 - 2024. All rights reserved.