我有一个小问题:我需要检测我的网站的用户是否在设定的时间范围内未执行任何Ajax POST请求,并提示他进行一些处理。我已经有如下代码:
var idleCounter = 600
var loginTimeoutCounter = setInterval(function() {
console.log(idleCounter)
// If a POST request is detected, reset idleCounter to max value.
if (idleCounter > 0) {
idleCounter -= 1
} else {
var promptAboutLogout = confirm('You have been idle for more than 6 hours.\n\n' +
'Your login session could have expired by now.\n\n' +
'Please be sure to refresh this web page before attempting to upload new content.\n\n' +
'Press OK to reload this page, or Cancel to stay on it as-is.')
if (promptAboutLogout) {
clearInterval(loginTimeoutCounter)
location.reload() // Reload the web page to refresh the login credentials.
} else {
idleCounter = 600 // Re-set the counter for 10 min to give user another prompt.
}
}
}, 1000)
我只是不知道如何整齐地添加代码以进行POST请求检测。我不想在表单提交eventListener几百行之前就把idleCounter值修改粘合在一起,因为它很杂乱,并且很难回到代码在任何可预见的将来经过下一个修订的时间。
是否有整洁的JS函数来处理任何POST请求?
答案 0 :(得分:0)
如果要在会话即将到期之前而不是在会话到期之后提示用户,则使用的方法更有意义。但是,如果您想继续使用这种方法,则应该在您触发所有ajax请求的地方使用一个通用的controller / util(将其包装为用于ajax请求的lib的包装器)。因此,每当您要调用ajax请求时,就将详细信息传递给控制器,该控制器又将发出实际的ajax请求。然后它将接收来自服务器的响应,并将其传递给被调用者以进行进一步处理。在这里,您可以处理每个发布请求的计时器变量。
现在,如果您使用的是通用控制器,则可以一起摆脱此计时器。当会话到期时,您的服务器将重定向到登录页面,大多数状态代码为302。您的浏览器将处理此重定向请求,并使用登录页面的html服务您的ajax回调。此时,您可以提示您的消息对话框或事件,以更好地显示登录屏幕,以便用户可以从那里重新进行身份验证并继续其工作。这应该是一些代码更改,但肯定会在将来减轻麻烦。