I've seen a bunch of these threads and went through a few of them but nothing seemed to be of help so far. So I'm trying to call the timer continuously while the ajax call is taking place. Once the ajax call reaches the complete event, I'd like to clearInterval the timer, but that doesn't seem to be working because the call to CheckProgress() keeps going and going.
Here's my code:
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);
}
EDIT:
Your code is fine. Here is a fiddle. It works on Google Chrome and Firefox just as you expected. Can you confirm this snippet is not working on your machine?
I made few tiny changes:
/echo/json
setInterval(CheckProgress, 5000)
instead of string with JavaScriptInterval function is called few times and is cleared once
echo
service AJAX call returns. Exactly how you want it to be.Can you reproduce the problem there?
I've never liked setInterval. I like managing timers directly.