0

私はこのループを持っています

3秒ごとに時間間隔を使用しています

 $(window).blur(function () {
            clearInterval(time);
            time = setInterval(function () {
                $.ajax({
                    url: "@Url.Action("CheckExpiration", "admin")",
                    type: "POST",
                    success: function (data) {
                        if (data == 1)
                        {
                            window.location.href="/admin"
                        }
                    }
                });
            }, 3000);
        });
        $(window).focus(function () {
            time = setInterval(function () {
                $.ajax({
                    url: "@Url.Action("RefreshCookies", "admin")",
                    type: "POST",
                    success: function (data) {
                        if (data == 1) {
                            alert(Expired);
                        }
                   }
                });
            }, 3000);
        });

しかし、ページをぼかすたびに、競合が発生しているように見えますが、代わりに両方が発火しています。ぼかしイベントの時間をクリアしていると思います..現在、アプリケーションのログインを行っており、ウィンドウは非アクティブであり、Cookie の有効期限が切れると自動的にログインするように求められます。誰か助けてもらえますか? これの解決策は、TIMEの値をクリアすることだと思います。どうすればよいですか?

4

1 に答える 1

0

setInterval問題は、 ajax と呼ばれるものを使用していることだと思います。間隔が停止していても ajax も停止するという意味ではありません。これは非同期で動作するためです。ページをぼかしたときに発火しないのはなぜですか。

successこれを修正するには、ページをぼかしたりフォーカスしたりするときに呼び出される ajaxの関数を防止するフラグが必要です。さらに、サーバーの負荷を減らすために、最後の ajax が完了した後に再度 ajax を呼び出すとよいでしょう。そのため、再帰的な手法を使用loopsetTimeoutます。

固定については、以下のコードを参照してください

   // flag when is blur
   var isBlur = false;

   $(window).blur(function () {

        isBlur = true; // flaged

        (function loop() {
            $.ajax({
                url: "@Url.Action("CheckExpiration", "admin")",
                type: "POST",
                success: function (data) {
                    if (data == 1 && isBlur)
                    {
                        window.location.href="/admin"

                        // this make sure u call it when the ajax is complete
                        setTimeout(loop, 3000); 
                    }
                }
            });
        })();
    });

    $(window).focus(function () {

        isBlur = false; // flaged

        (function loop() {
            $.ajax({
                url: "@Url.Action("RefreshCookies", "admin")",
                type: "POST",
                success: function (data) {
                    if (data == 1 && !isBlur) {
                        alert(Expired);

                        // this make sure u call it when the ajax is complete
                        setTimeout(loop, 3000); 
                    }
               }
            });
        })();
    });

この助けを願っています!

于 2013-10-01T05:26:22.333 に答える