它会在每次调用之间进行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?
},
});
答案 0 :(得分:4)
首先,您正在做的事情被称为" 民意调查"技术。要做到这一点"正确的方式",最好使用递归函数,而不是:
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);
答案 1 :(得分:1)
您可以设置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
答案 2 :(得分:0)
将全局计数器变量声明为0成功外部函数。对于前者 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。