ajax 调用完成时结束 setInterval
Ending setInterval when ajax call is complete
$.ajax({
url: vars.url,
type: "post",
data: r,
async: true,
processData: vars.process,
contentType: vars.contenttype,
beforeSend: function(){
if(vars.loadbar == 'true'){
setInterval(function () {
$.getJSON(domain + '/core/files/results.json', function (data) {
console.log(data);
})
}, 1000);
}
},
complete: function(){
clearInterval();
},
succes: function(data){
..................
}
})
所以我试图结束我的代码在 ajax 调用完成后立即产生的无限循环。现在它几乎每秒都会打电话给我的文件以获取结果,我想在 ajax 通话完成后立即停止。
我不确定如何处理这个问题,因为如果我将一个变量分配给 setInterval
(它在 beforeSend
本身的函数中,或者在 AJAX 调用),它要么看不到变量,要么我的变量为空。我想我正在接近这个错误。我可以在 beforeSend 中检查 AJAX 调用是否完成以结束循环吗?
您可以将间隔存储为全局变量,并在需要时清除它。像这样:
let interval;
$.ajax({
url: vars.url,
type: "post",
data: r,
async: true,
processData: vars.process,
contentType: vars.contenttype,
beforeSend: function(){
if(vars.loadbar == 'true'){
interval = setInterval(function () {
$.getJSON(domain + '/core/files/results.json', function (data) {
console.log(data);
})
}, 1000);
}
},
complete: function(){
clearInterval(interval);
},
succes: function(data){
..................
}
}
$.ajax({
url: vars.url,
type: "post",
data: r,
async: true,
processData: vars.process,
contentType: vars.contenttype,
beforeSend: function(){
if(vars.loadbar == 'true'){
setInterval(function () {
$.getJSON(domain + '/core/files/results.json', function (data) {
console.log(data);
})
}, 1000);
}
},
complete: function(){
clearInterval();
},
succes: function(data){
..................
}
})
所以我试图结束我的代码在 ajax 调用完成后立即产生的无限循环。现在它几乎每秒都会打电话给我的文件以获取结果,我想在 ajax 通话完成后立即停止。
我不确定如何处理这个问题,因为如果我将一个变量分配给 setInterval
(它在 beforeSend
本身的函数中,或者在 AJAX 调用),它要么看不到变量,要么我的变量为空。我想我正在接近这个错误。我可以在 beforeSend 中检查 AJAX 调用是否完成以结束循环吗?
您可以将间隔存储为全局变量,并在需要时清除它。像这样:
let interval;
$.ajax({
url: vars.url,
type: "post",
data: r,
async: true,
processData: vars.process,
contentType: vars.contenttype,
beforeSend: function(){
if(vars.loadbar == 'true'){
interval = setInterval(function () {
$.getJSON(domain + '/core/files/results.json', function (data) {
console.log(data);
})
}, 1000);
}
},
complete: function(){
clearInterval(interval);
},
succes: function(data){
..................
}
}