0

我有一个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 个实例会循环?

4

1 回答 1

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

于 2012-12-07T02:00:00.560 回答