javascript setInterval没有触发

时间:2013-05-23 22:45:46

标签: ajax setinterval

我有一个长时间运行的数据库更新,我想在它发生时报告。 我准备点火的间隔时间 我已经看到了很多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

1 个答案:

答案 0 :(得分:1)

据我所知,你不能从你的ajax返回一个值,因为它是异步的。处理方式是通过回调。所以这部分代码:

var saveStatus = ajaxCall("WebServices/FLSAService.asmx/CheckFLSASaveStatus");
if (saveStatus == null) {
    clearInterval(checkTimer);
    return;
}

很可能无法正常运作。没有看到ajaxCall函数很难说,但你可能没有得到你想要得到的结果。左手边的分配不会反映任何异步的东西。因此,它将是从ajaxCall返回的默认值,或者是undefined,与== null相比将为真,反过来将清除您的间隔并返回。