JavaScript 定时器函数

标签 javascript jquery

我使用计时器函数每五秒检查一次 session 是否有效。

setInterval(checksession,5000);

function checksession(called_for) {
    //alert('check-session')

        $.ajax({
            type:'POST'
            ,url:'CheckSession'
            ,success: validateresult
            ,data: { antiCSRF : '{{acsrf}}',
                   session_id: '{{session_id}}'}
            //,error: function(){ alert('Session check failed') }
            })
}

我想知道如果在检查 session 时同时有多个ajax调用会发生什么。它会是两个独立的线程吗?

这是检查 session 的正确方法吗?

最佳答案

因此,首先,您最好使用 setTimeout 而不是 setInterval。您确实希望下一次检查在获得上一次检查的答案后 x 秒进行,而不是每隔 x 秒进行一次(无论是服务器延迟、网络延迟等)。最重要的是,我认为最好先执行 setTimeout,然后在 ajax 回调中执行另一个 `setTimeout。

JS 是单线程的,所以你不会在两个单独的线程中执行它,但你可以同时挂起多个 ajax 调用,我认为这就是你的意思。

最后,关于“正确”。这实际上在一定程度上取决于您想要实现的目标。一般来说,具有滑动到期时间的 session (对服务器进行任何“检查”的唯一实时时间应该重要,因为否则它们可以一次获得到期时间并在客户端上计算时间)在一段时间不活动后会超时。如果您的脚本通过每五秒 ping 一次服务器来进行“假”事件,那么您不妨将过期时间设置为无穷大,而不让它永远过期。或者将其设置为在浏览器窗口关闭时过期,无论哪种方式。

如果您尝试优雅地处理过期 session ,那么在 Ajax 中处理它的更好方法是仅处理服务器在您不再登录时向您发送的 401 错误。

关于JavaScript 定时器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271906/

相关文章:

javascript - $(this) 在插件选项中

javascript - Grunt Watch 任务不必要地重复步骤

javascript - jQuery 插件 slick 不工作

javascript - 将 cookie 设置为每个 session 只显示一次 DIV

javascript - 在其他作用域中运行某个作用域的函数

javascript - 如何获取输入单选按钮的值并根据答案执行某些操作?

jquery - 为什么 JQuery height() 函数返回零?

javascript - 访问JSON信息: Objects in Objects

jQuery/CSS 偏移+鼠标移动问题

javascript - 为什么 jQuery next 找不到下一个 div?