我有一个长时间运行的数据库更新,我想在它发生时报告。 我准备点火的间隔时间 我已经看到了很多setInterval问题的例子,它看起来很简单,但我不能用这段代码来解决它。 checkSaveStatus代码会返回一个状态报告,告知已保存的行数。一旦我能够使基本功能正常工作,我将在显示结果后对其进行增强。
我开始怀疑这可能与我处理Ajax调用的方式有关。
var checkTimer;
function checkSaveStatus() {
var saveStatus = ajaxCall("WebServices/FLSAService.asmx/CheckFLSASaveStatus");
if (saveStatus == null) {
clearInterval(checkTimer);
return;
}
log('saveStatus: ' + saveStatus.InputCount + '/' + saveStatus.ResultCount + ':' + saveStatus.SaveComplete, 'FLSA');
if (saveStatus.SaveComplete) {
reportSaveComplete = true;
clearInterval(checkTimer);
}
}
checkTimer = window.setInterval(checkSaveStatus, 1000);
... make an asynchronous Ajax call that takes a long time to complete
... the checkSaveStatus code doesn't fire until the Ajax call completes
答案 0 :(得分:1)
据我所知,你不能从你的ajax返回一个值,因为它是异步的。处理方式是通过回调。所以这部分代码:
var saveStatus = ajaxCall("WebServices/FLSAService.asmx/CheckFLSASaveStatus");
if (saveStatus == null) {
clearInterval(checkTimer);
return;
}
很可能无法正常运作。没有看到ajaxCall
函数很难说,但你可能没有得到你想要得到的结果。左手边的分配不会反映任何异步的东西。因此,它将是从ajaxCall
返回的默认值,或者是undefined
,与== null
相比将为真,反过来将清除您的间隔并返回。