簡體   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