1

私はこれらのスレッドをたくさん見て、それらのいくつかを調べましたが、これまでのところ何も役に立たなかったようです。そのため、ajax呼び出しが行われている間、タイマーを継続的に呼び出そうとしています。ajax呼び出しが完全なイベントに到達したら、タイマーをclearIntervalしたいのですが、CheckProgress()の呼び出しが継続しているため、これは機能していないようです。

これが私のコードです:

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);
    }

編集: ここに画像の説明を入力してください

4

2 に答える 2

4

私はsetIntervalが好きではありませんでした。タイマーを直接管理するのが好きです。

var timerStop = false

$("#ChartUpdateData").click(function () {
    $("#loadingimgfeatdiv").show(); //ajax loading gif
    if (!timerStop) {
        console.log("Starting Progress Checks...");
        CheckProgress()
    }

    $.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();
            timerStop = true;
        },
    });

});

function CheckProgress()  {
    if(timerStop) {
        console.log("Ending Progress Checks...");
        return;
    }
    console.log("Checking Progress...");
    console.log(timer);
    window.setTimeout(function(){CheckProgress()}, 5000);
}
于 2011-09-26T19:37:45.963 に答える
1

あなたのコードは大丈夫です。これがフィドルです。期待どおりにGoogleChromeとFirefoxで動作します。このスニペットがお使いのマシンで機能していないことを確認できますか?

私はいくつかの小さな変更を加えました:

  • AJAX呼び出し/echo/json
  • より短い間隔(50ミリ秒)
  • 関数参照:setInterval(CheckProgress, 5000)JavaScriptの文字列の代わりに

インターバル関数は数回呼び出され、echoサービスAJAX呼び出しが戻るとクリアされます。まさにあなたがそれをどのようにしたいか。

そこで問題を再現できますか?

于 2011-09-26T19:35:24.820 に答える