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

如何阻止javascript函数(轮询)多次执行?,javascript,jquery,ajax,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:

我有一个
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) 在
#刷新
单击时,此时会调用
poll()
,以立即请求新数据

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


如何修复此问题,以便每当我单击“刷新”时,只剩下一个实例循环?

首先将
设置超时
对象存储到类似以下的变量中

var a = poll(10);
$("document").ready(function(){
   var a = null;   
   $("#refresh").click(function(){ 
      if(a != null){
           clearTimeout(a);
           a = null;
      }
      a = poll(10); 
   });
});
然后使用此代码单击“刷新”后停止

clearTimeout(a);
所以会是这样

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


这看起来正是我所需要的,只是出于某种原因,clearTimeout(a)无法销毁setTimeout对象。@RiMMER可能@Mahan正在考虑
setInverval
/
clearInterval
@RiMMER请检查我放置的引用