setTimeout ajax throttle不工作

时间:2018-03-02 00:35:38

标签: javascript ajax timer

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

所以我有一个计时器

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

所以我的计时器无效。这是怎么回事??

1 个答案:

答案 0 :(得分:0)

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

考虑将其移至getMoreData方法,sample

function getMoreData(){
   clearTimeout(timer);
   timer = setTimeout(...)
   //Your other ajax   
}