Javascript计时器功能

时间:2014-08-12 18:51:01

标签: javascript jquery

我使用计时器功能每五秒检查一次会话是否有效。

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') }
            })
}

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

这是检查会话的正确方法吗?

1 个答案:

答案 0 :(得分:1)

首先,你最好(imo)使用setTimeout而不是setInterval。你真的希望你的下一次检查在你得到上一次检查的答案后x秒发生,而不是每隔x秒就会发生(b / c服务器滞后,网络延迟,等等)。最重要的是,最好做setTimeout然后在ajax回调中再做一次`setTimeout。

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

最后,关于“正确”。这实际上取决于你想要完成的事情。通常,具有滑动过期的会话(对服务器进行任何“检查”的唯一实时时间,因为否则它们可以一次到期并计算客户端上的时间)在一段时间不活动后会超时。如果你通过每隔五秒钟对服务器执行一次脚本'假'活动,那么你也可以将你的到期时间设置为无穷大而不会让它过期。或者在浏览器窗口关闭时将其设置为过期,无论哪种方式。

如果您正在尝试优雅地处理过期的会话,在Ajax中处理它的更好方法是只处理服务器应该发送给您的401错误(如果您不再登录)。