0

初心者 - 質問 -

解決しようとしている問題: XMLHttprequest によって閉じられていない開いている接続がある場合、それらを中止したいと考えています。

Ajax 呼び出しがある JavaScript ファイルでは、呼び出しごとにタイマーを開始し、成功コールバックと失敗コールバックの両方でタイマーをクリアする必要があります。確認したい-タイマーが起動した場合、リクエストが返されなかったことを意味するため、中止する必要があります。アボートにもかかわらず、リクエストが戻ってくる可能性がある場合は、それらを破棄します。処理の前に成功と失敗のコールバックをチェックし、適切に処理するフラグを追加したい。

このようなタイマーを追加したい:

    var timer = setTimeout(function() {         // Start a timer. If triggered,
                           timedout = true; // set a flag and then
                           request.abort(); // abort the request.
                       },
                       timeout);            // time specified

しかし、以下のような既存のコードでは、タイマーを開始して中止する場所を理解するのが難しいと感じています。

        this.ajaxCall = function(urlSuffix, type, data, successCallback, errorCallback, callbackParam, logFlag)
 {
    if (!successCallback) {
        throw "A successCallback must be supplied";
    }
    if (!errorCallback) {
        throw "An errorCallback must be supplied";
    }
    var st = 0;
    if (logFlag !== false)
        st = LogMessageTestCL(urlSuffix + " - start: " + type, -1);
    $.ajax({
        url: urlRoot + urlSuffix,
        type: type,
        data: data,
        cache: false,

        success: function(msg) {
            try {
                if (logFlag !== false)
                    LogMessageTestCL(urlSuffix + " - end: " + type, st);
                successCallback(msg, callbackParam);
            }
            catch (e) {
                // this will only fail when the calling page is unloaded before the call returns, so no need to log this
            }
        },
        error: function(xhr,status) { 
            try {
                if (logFlag !== false)
                    LogMessageTestCL(urlSuffix + " - error end: " + type, st);
                if (status === "timeout") {
                    alert("30 sec time out");   
                    LogMessageTestCL("callback timed out");
                    return;
                }
                else if (status === "error") {
                    if (xhr.status != 200) {
                        errorCallback(xhr, callbackParam);
                    }
                }
                else
                    errorCallback(xhr, callbackParam);
            }
            catch (e) {
                // this will only fail when the calling page is unloaded before the call returns, so no need to log this
            }
        }
    });
}

どんな助けでも大歓迎です。

4

1 に答える 1