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