如何停止多次执行javascript函数(轮询)?

时间:2012-12-07 01:56:03

标签: 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: "/ajax/livedata.php", success: function(data){
         $("#result").html(data);
         poll(timeout);
      }, dataType: "json"});
   }, timeout);
}

那么,那里会发生什么:

1)在页面加载时,调用poll()并开始执行循环。

2)在#refresh点击时,此时会调用poll()以立即请求新数据。

问题:每当我点击#refresh申请新数据时,poll()会再次被调用,但会被多次激活(第一次是初始+每次新点击) 。因此它不会像预期的那样每10秒触发一次,而是每10秒触发一次(取决于我点击#refresh的次数)。

如何解决此问题,以便每当我点击#refresh时,只有1个实例会循环播放?

1 个答案:

答案 0 :(得分:0)

首先将setTimeout对象存储到有点像这样的变量

var a = poll(10);

然后在使用此代码点击刷新时停止它

clearTimeout(a);

所以它会像这样

$("document").ready(function(){
   var a = null;   
   $("#refresh").click(function(){ 
      if(a != null){
           clearTimeout(a);
           a = null;
      }
      a = poll(10); 
   });
});

参考:

http://www.w3schools.com/jsref/met_win_cleartimeout.asp

http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_stop