我有这个循环
我每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的价值怎么做?
答案 0 :(得分:0)
我认为问题是您使用setInterval
来调用ajax。是指即使间隔停止也不意味着ajax也会停止,导致它的异步工作。这就是为什么在模糊页面时不会触发一个。
为了解决这个问题,我们需要一个标志来阻止ajax中的success
函数,当你模糊或聚焦页面时,这个函数会被调用。如果您在完成最后一次减少服务器负载后再次调用ajax,那将会很棒。所以我们使用loop
和setTimeout
递归技术。
修正了以下代码
// 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);
}
}
});
})();
});
希望这有帮助!