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 是否已过期窗口处于非活动状态,它会在 cookie 过期时自动提示登录.. 任何人都可以帮助我吗?我认为解决这个问题的方法是清除 TIME 的值怎么办?

4

1 回答 1

0

我认为问题是你使用setInterval调用ajax。是意味着即使间隔停止也不意味着ajax也会停止,因为它是异步工​​作的。这就是为什么在您模糊页面时不触发一个。

要修复它,我们需要一个标志来防止success在您模糊或聚焦页面时调用 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 回答