[英]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.