全局Javascript计时器未从按钮单击重置
我在一个MVC应用程序中工作,我遇到了一个全局javascript计时器的问题,如果用户的会话过期,它会将用户发送到登录页面。设置计时器并让它执行注销功能工作正常,但我尝试设置单击功能应重置计时器(以尝试并防止计时器过早关闭用户会话),我不确定我做了什么错误 _Layout.csthml中的代码全局Javascript计时器未从按钮单击重置,javascript,c#,jquery,model-view-controller,timer,Javascript,C#,Jquery,Model View Controller,Timer,我在一个MVC应用程序中工作,我遇到了一个全局javascript计时器的问题,如果用户的会话过期,它会将用户发送到登录页面。设置计时器并让它执行注销功能工作正常,但我尝试设置单击功能应重置计时器(以尝试并防止计时器过早关闭用户会话),我不确定我做了什么错误 _Layout.csthml中的代码 <script> //session end var sessionTimer = 0; var sessionTimeoutWarning = @Session.Timeout- 1; v
<script>
//session end
var sessionTimer = 0;
var sessionTimeoutWarning = @Session.Timeout- 1;
var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000;
function SessionEnd() {
document.getElementById('logoutForm').submit();
}
function SetTimer() {
ClearTimer();
sessionTimer = setInterval('SessionEnd()', sTimeout);
};
function ClearTimer() {
clearInterval(sessionTimer);
};
$('body').on('click', function () {
ClearTimer();
});
$(document).ready(function () {
SetTimer();
});
//会话结束
var sessionTimer=0;
var sessionTimeoutWarning=@Session.Timeout-1;
var sTimeout=parseInt(sessionTimeoutWarning)*60*1000;
函数SessionEnd(){
document.getElementById('logoutForm').submit();
}
函数SetTimer(){
ClearTimer();
sessionTimer=setInterval('SessionEnd()',sTimeout);
};
函数ClearTimer(){
clearInterval(会话时间);
};
$('body')。在('click',函数(){
ClearTimer();
});
$(文档).ready(函数(){
SetTimer();
});
Web.config中的相关代码:
<sessionState timeout="2"></sessionState>
编辑:我现在意识到它显示我只是在点击按钮时清除计时器。我只是想在每次尝试重置它之前看看它是否真的会清除它。看起来问题在于在_布局中使用$('document')。准备触发SetTimer。代码位于_Index_布局中,如下所示:
<script>
//session end
if (sessionTimer === undefined)
var sessionTimer = 0;
var sessionTimeoutWarning = @Session.Timeout- 1;
var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000;
SetTimer();
function SessionEnd() {
document.getElementById('logoutForm').submit();
}
function SetTimer() {
ClearTimer();
sessionTimer = setTimeout('SessionEnd()', sTimeout);
};
function ClearTimer() {
clearTimeout(sessionTimer);
};
$('body').on('click', function () {
ClearTimer();
});
</script>
//会话结束
if(sessionTimer==未定义)
var sessionTimer=0;
var sessionTimeoutWarning=@Session.Timeout-1;
var sTimeout=parseInt(sessionTimeoutWarning)*60*1000;
SetTimer();
函数SessionEnd(){
document.getElementById('logoutForm').submit();
}
函数SetTimer(){
ClearTimer();
sessionTimer=setTimeout('SessionEnd()',sTimeout);
};
函数ClearTimer(){
clearTimeout(sessionTimer);
};
$('body')。在('click',函数(){
ClearTimer();
});
您可以清除它,但不需要重新启动它……是的,我首先测试它是否会清除计时器,但它没有这样做。这是主要问题;由于某些原因,在按钮点击时计时器没有清除。那么,你在身体点击时调用它,。。。。单击事件是否到达主体?按钮是否阻止点击到达?如预期,每次点击都会触发事件。它实际上并没有清除计时器。因此,每次一分钟后,都会调用注销方法。您不应该使用setInterval(),而应该使用setTimeout()。如果您说正在调用ClearTimer
,我会怀疑您是否触发了多个计时器。