我正在实现一种功能,如果用户会话即将在一分钟之前到期,用户将获得弹出窗口。在弹出窗口中有两个按钮“OK”和“Cancel”。如果用户单击“确定”按钮,则向服务器发出AJAX POST调用。 以下是我写的代码 -
var sessionTimeoutWarning = parseInt(@Session.Timeout - 1);
var sessionTimeout = @Session.Timeout;
var sessionWarningTimer = null;
var sessionExpireTimer = null;
//For Session Expire Warning Popup
var sessionWarningTimer = setTimeout('startTimer()', parseInt(sessionTimeoutWarning) * 60 * 1000);
//For Session Expired Popup
var sessionExpireTimer = setTimeout('showLogoutModal()', parseInt(@Session.Timeout) * 60 * 1000);
function showLogoutModal() {
$("#session-expired-modal").modal('show');
}
function startTimer() {
$("#session-expire-warning-modal").modal('show');
var count = 60;
var timer = setInterval(function () {
$("#seconds-timer").html(count--);
if (count == -1) {
clearInterval(timer);
$(".modal-body").html("Your session is expired.");
}
}, 1000);
}
function executeAjaxCall() {
$.ajax({
url: '/Home/SessionTimeout',
dataType: "json",
async: false,
type: "POST"
});
}
$("#btnOk").click(function () {
executeAjaxCall();
$("#session-expire-warning-modal").modal('hide');
alert(sessionWarningTimer);
alert(sessionExpireTimer);
if(sessionExpireTimer != null)
{
alert("here");
clearTimeout(sessionExpireTimer);
}
//For Session Expire Warning Popup
var sessionWarningTimer = setTimeout('startTimer()', parseInt(sessionTimeoutWarning) * 60 * 1000);
//For Session Expired Popup
var sessionExpireTimer = setTimeout('showLogoutModal()', parseInt(@Session.Timeout) * 60 * 1000);
});
$("#btnExpiredOk").click(function () {
$("#session-expire-warning-modal").modal('hide');
$("#session-expired-modal").modal('hide');
window.location = "/Home/Index";
});
$("#session-expire-warning-modal").on("hidden.bs.modal", function () {
$("#session-expire-warning-modal").modal('hide');
});
$("#session-expired-modal").on("hidden.bs.modal", function () {
$("#session-expire-warning-modal").modal('hide');
$("#session-expired-modal").modal('hide');
window.location = "/Home/Index";
});
现在问题是,在制作AJAX之后,sessionWarningTimer
和sessionExpireTimer
的值为undefined
。
答案 0 :(得分:0)
您要多次重新声明sessionExpireTimer
和sessionWarningTimer
。在我看来就像一个范围问题。
我建议您使用"use strict"
启动js以防止出现这类问题。
简而言之,请尝试删除按钮上的var
关键字点击回调:
//For Session Expire Warning Popup
sessionWarningTimer = setTimeout('startTimer()', parseInt(sessionTimeoutWarning) * 60 * 1000);
//For Session Expired Popup
sessionExpireTimer = setTimeout('showLogoutModal()', parseInt(@Session.Timeout) * 60 * 1000);
因此,您将为先前声明的变量确定值,而不是将它们重新声明为此函数范围