JavaScript-检测是否发生了POST请求

时间:2018-11-30 03:35:14

标签: javascript ajax post

我有一个小问题:我需要检测我的网站的用户是否在设定的时间范围内未执行任何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请求?

1 个答案:

答案 0 :(得分:0)

如果要在会话即将到期之前而不是在会话到期之后提示用户,则使用的方法更有意义。但是,如果您想继续使用这种方法,则应该在您触发所有ajax请求的地方使用一个通用的controller / util(将其包装为用于ajax请求的lib的包装器)。因此,每当您要调用ajax请求时,就将详细信息传递给控制器​​,该控制器又将发出实际的ajax请求。然后它将接收来自服务器的响应,并将其传递给被调用者以进行进一步处理。在这里,您可以处理每个发布请求的计时器变量。

现在,如果您使用的是通用控制器,则可以一起摆脱此计时器。当会话到期时,您的服务器将重定向到登录页面,大多数状态代码为302。您的浏览器将处理此重定向请求,并使用登录页面的html服务您的ajax回调。此时,您可以提示您的消息对话框或事件,以更好地显示登录屏幕,以便用户可以从那里重新进行身份验证并继续其工作。这应该是一些代码更改,但肯定会在将来减轻麻烦。