-1

データベースの更新が長期にわたって行われているため、その更新について報告したいと考えています。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
4

1 に答える 1

1

私の知る限り、非同期であるため、ajax から値を返すことはできません。処理される方法は、コールバックを使用することです。したがって、コードのこのセクション:

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

正常に動作していない可能性が高いです。関数を見ずして何とも言えajaxCallませんが、意図した結果が得られていない可能性があります。その左側の割り当ては、非同期になるものを反映しません。その結果、デフォルト値が から返されるかajaxCall、または になりundefined、 と比較する== nullと true になり、間隔がクリアされて戻ります。

于 2013-05-23T22:51:13.140 に答える