繁体   English   中英

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

[英]How can I stop a javascript function (poll) from being executed multiple times?

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

首先将您的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM