还有一个javascript clearInterval不起作用
我看过很多这样的帖子,也看过其中的一些,但到目前为止似乎没有任何帮助。因此,我试图在ajax调用发生时连续调用计时器。一旦ajax调用到达完成事件,我想清除计时器的间隔,但这似乎不起作用,因为对CheckProgress()的调用一直在进行 这是我的密码:还有一个javascript clearInterval不起作用,javascript,setinterval,clearinterval,Javascript,Setinterval,Clearinterval,我看过很多这样的帖子,也看过其中的一些,但到目前为止似乎没有任何帮助。因此,我试图在ajax调用发生时连续调用计时器。一旦ajax调用到达完成事件,我想清除计时器的间隔,但这似乎不起作用,因为对CheckProgress()的调用一直在进行 这是我的密码: var timer = ""; $("#ChartUpdateData").click(function () { $("#loadingimgfeatdiv").show(); //ajax loa
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);
}
编辑:
您的代码很好。这是一本书。它在谷歌Chrome和Firefox上运行,正如您所期望的那样。您能确认此代码段在您的计算机上不工作吗 我做了一些微小的改变:
- AJAX调用
/echo/json
- 较小的间隔(50毫秒)
- 函数引用:
而不是带有JavaScript的字符串setInterval(CheckProgress,5000)
你能重现那里的问题吗?你的代码很好。这是一本书。它在谷歌Chrome和Firefox上运行,正如您所期望的那样。您能确认此代码段在您的计算机上不工作吗 我做了一些微小的改变:
- AJAX调用
/echo/json
- 较小的间隔(50毫秒)
- 函数引用:
而不是带有JavaScript的字符串setInterval(CheckProgress,5000)
你能重现那里的问题吗?我从来都不喜欢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);
}
我从来都不喜欢赛特威特。我喜欢直接管理计时器
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);
}
您确定调用过
complete
函数吗?这可能只是AJAX请求的一个问题,与setInterval()
无关。100%确定其工作正常。我可以看到console.log(“结束进度检查…”);正在处理中。我添加了一个firebug的图像来帮助显示正在发生的事情。我认为你把事情复杂化了。既然可以处理$.ajax提供的所有事件,那么首先为什么需要这些计时器?setInterval(CheckProgress,5000)
是正确的声明。传递字符串是不推荐使用的表单。另外,请确保您多次单击,否则您将丢失对原始计时器的引用。@zzbov您能否详细说明一下单击多次的含义?我不是,但我认为计时器是全局性的:(所以我认为无论你说什么都可能是问题所在。你确定你的complete
函数被调用过吗?这可能只是你的AJAX请求有问题,与setInterval()
无关。100%确定它在工作。我可以看到console.log(正在处理“正在结束进度检查…”。我添加了firebug的图像以帮助显示正在进行的操作。我认为您的操作过于复杂。既然您可以处理$.ajax提供的所有事件,为什么首先需要这些计时器?setInterval(CheckProgress,5000)
是正确的声明。传递字符串是不推荐使用的形式。此外,请确保您多次单击,否则您将丢失对原始计时器的引用。@zzzzBov能否详细说明一下单击多次的含义?我不是,但我认为计时器是全局的:(所以我认为无论你在说什么都可能是问题所在。不,我无法在JSFIDLE中重现问题。它的工作原理与我的预期一致:(你认为我在MVC3应用程序中工作的事实与它为什么不工作有关吗?不,我无法在JSFIDLE中重现问题。它的工作原理与我的预期一致:(你认为我在MVC3应用程序中工作这一事实与它为什么不工作有关吗?至少使用window.setTimeout(CheckProgress,5000)
正如我们都理解和喜欢这里的一样,这很好!但我仍然想弄清楚为什么setInterval没有按它“应该”的方式工作。如果没有其他东西发布,我会在几个小时内接受。这是我第二次陷入setInterval()
陷阱。谢谢!!至少使用window.setTimeout(CheckProgress,5000);
正如我们都逐渐理解和喜爱的那样,这非常有效!但我仍然想弄清楚为什么setInterval不能“正常”工作。如果没有其他消息发布,我会在几个小时内接受。这是我第二次落入setInterval()
陷阱。谢谢!!