我已经看过很多这样的线程并经历了其中的一些,但到目前为止似乎没有任何帮助。因此,我正在尝试在ajax呼叫发生时连续呼叫计时器。一旦ajax调用到达完整事件,我想clearInterval计时器,但这似乎不起作用,因为对CheckProgress()的调用继续进行。
这是我的代码:
var timer = "";
$("#ChartUpdateData").click(function () {
$("#loadingimgfeatdiv").show(); //ajax loading gif
if (timer == "")
{
console.log("Starting Progress Checks...");
timer = window.setInterval("CheckProgress()", 5000);
}
$.ajax({
type: "POST",
async: true,
url: '@(Url.Action("UpdateServerData","Charts"))',
contentType: "application/json; charset=utf-8",
success: function (data) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
},
complete:function (jqXHR, textStatus) {
$("#loadingimgfeatdiv").hide();
StopCheckingProgress();
LoadChart();
},
});
});
function StopCheckingProgress()
{
window.clearInterval(timer);
timer = "";
console.log("Ending Progress Checks...");
}
function CheckProgress()
{
console.log("Checking Progress...");
console.log(timer);
}
编辑:
答案 0 :(得分:4)
我从未喜欢过setInterval。我喜欢直接管理计时器。
var timerStop = false
$("#ChartUpdateData").click(function () {
$("#loadingimgfeatdiv").show(); //ajax loading gif
if (!timerStop) {
console.log("Starting Progress Checks...");
CheckProgress()
}
$.ajax({
type: "POST",
async: true,
url: '@(Url.Action("UpdateServerData","Charts"))',
contentType: "application/json; charset=utf-8",
success: function (data) {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
},
complete:function (jqXHR, textStatus) {
$("#loadingimgfeatdiv").hide();
timerStop = true;
},
});
});
function CheckProgress() {
if(timerStop) {
console.log("Ending Progress Checks...");
return;
}
console.log("Checking Progress...");
console.log(timer);
window.setTimeout(function(){CheckProgress()}, 5000);
}
答案 1 :(得分:1)
你的代码很好。这是一个fiddle。它可以像您预期的那样在Google Chrome和Firefox上运行。您能否确认此代码段在您的计算机上无效?
我做了一些微小的改动:
/echo/json
setInterval(CheckProgress, 5000)
而不是带有JavaScript的字符串几次调用间隔函数,并在echo
服务AJAX调用返回后清除。确切地说你想要它。
你能在那里重现这个问题吗?