它进行 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,您稍后可以使用该 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);
关于javascript - 如何在ajax请求中停止setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48365966/