Javascript jquery每秒调用一次ajax,直到调用完成/返回true为止
我需要能够每秒调用一个函数“getProgress”。此函数执行ajax请求并更新进度条。当从ajax返回的调用为“true”时,我需要能够停止对该函数的调用 Html: 方法#1: 您可以在名为requestRunning的函数之外创建一个变量,并在调用getProgress时检查requestRunning是否为trueJavascript jquery每秒调用一次ajax,直到调用完成/返回true为止,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我需要能够每秒调用一个函数“getProgress”。此函数执行ajax请求并更新进度条。当从ajax返回的调用为“true”时,我需要能够停止对该函数的调用 Html: 方法#1: 您可以在名为requestRunning的函数之外创建一个变量,并在调用getProgress时检查requestRunning是否为true // Pseudo-code var requestRunning = false; if requestRunning === true => continue
// Pseudo-code
var requestRunning = false;
if requestRunning === true => continue with getProgress
if requestRunning === false => stop firing getProgress
方法#2:
在请求成功时使用setInterval和,并清除间隔
var progressHandle = setInterval(function(){getProgress(id)}, 1000);
$.ajax({
success: function() {
clearInterval(progressHandle);
}
});
我可能更喜欢第一个选项,尽管通过后续AJAX调用进行进度检查并不是很好
var interval = setInterval(function(){getProgress(operationId,interval)},1000);
在$.POST complete回调函数中,清除此间隔:{我在这里使用complete,但如果您只想为成功的请求执行此操作,请使用.success()}
我喜欢这种方法。它不需要清除间隔。它只需自己运行,并在必要时设置超时
var operationId = ...;
var processFunction = function () {
$.post("@Url.Action("Status","Packages")", { operationId: operationId }, function (data) {
if (data !== true) {
// your normal function stuff
setTimeout(processFunction, 1000);
}
});
};
setTimeout(processFunction, 1000);
阅读:我真正想问的是如何每秒调用这个函数,并在post返回true时停止调用它。
var interval = setInterval(function(){getProgress(operationId,interval)},1000);
$.post("@Url.Action("Status","Packages")", { operationId: operationId }, function (data) {
if (data) {
for (var key in data) {
if ($("#prgbar-" + key + "").size() != 0) {
var objPrg = $("#prgbar-" + key + "");
var objchk = $("#chk-" + key + "");
if (data[key]) {
objPrg.find("span").text("downloading...").css("color:#000000");
objchk.hide();
objPrg.removeClass("hide").show().progressbar({
value: 0
});
var value = Math.floor(parseInt(data[key]) * 100);
objPrg.progressbar("option", "value", value);
objPrg.find("span").text(value + "%");
} else {
}
}
}
}
}).complete(function() { clearInterval(interval); });
var operationId = ...;
var processFunction = function () {
$.post("@Url.Action("Status","Packages")", { operationId: operationId }, function (data) {
if (data !== true) {
// your normal function stuff
setTimeout(processFunction, 1000);
}
});
};
setTimeout(processFunction, 1000);