簡體   English   中英

如何在ajax請求中停止setTimeout

[英]How to stop setTimeout inside ajax request

它進行ajax調用,每次調用之間有5秒的延遲。

30秒后,如何使用clearTimeout在ajax中停止此setTimeout?

$.ajax({
    url  : url,
    success : function(response){
         var Object = this;
         setTimeout(function(){     //How to stop this setTimeout
         $.ajax(Object);}, 5000)}   //using clearTimeout after 30 seconds?
          },
    });

首先,您正在做的事情稱為“ 輪詢 ”技術。 為了做到“正確”,最好使用遞歸函數,而不是:

var Object = this;
$.ajax(Object);

最好這樣寫:

function pollData() {
    $.ajax({
        url  : url,
        success : function(response){
            setTimeout(function() {
                pollData();
            }, 5000);
        }
}

下一個問題是,如果您由於某種原因想要停止輪詢(例如3秒鍾后),該怎么辦? setTimeout返回一個ID,您以后可以使用它clearTimeout

var pollingStatus = true;
var pollingTm = null;

function pollData() {
    $.ajax({
        url  : url,
        success : function(response){
            if (pollingStatus) {
                pollingTm = setTimeout(function() {
                    pollData();
                }, 5000);
            }
        }
}

function stopPolling() {
    pollingStatus = false;
    clearTimeout(pollingTm);
}

setTimeout(stopPolling, 3000);

您可以設置obj_timeout = setTimeout(...這樣,您將引用超出范圍的對象

var obj_timeout = null; 
var stop_sending_loop = false;

$.ajax({ 
  url  : url,
  success : function(response){
     var Object = this;

     obj_timeout = setTimeout(function(){     //How to stop this setTimeout
          if(!stop_sending_loop)
            $.ajax(Object);
         }, 5000)
       }   //using clearTimeout after 30 seconds?
     },
});

var stop_to = function(){
   if(obj_timeout != null)
   clearTimeout(obj_timeout)
   stop_sending_loop = true;
}

setTimeout(stop_to,30000);

請參閱: https//www.w3schools.com/jsref/met_win_cleartimeout.asp

將外部計數器函數的全局計數器變量聲明為0。 對於ex var counter = 0;

在成功功能中,如下設置setTimeout

var myVar = setTimeout(function(){
//How to stop this setTimeout
     counter++;
     $.ajax(Object);}, 5000)}   //using clearTimeout after 30 seconds?
      },

if (counter == 6) { clearTimeout(myVar);} // Since, 30/5 = 6

clearTimeout將停止setTimeout。 並且計數器確保在六個調用之后觸發clearTimeout。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM