1

我正在使用一些非常旧的代码,以下代码用于监视会话状态。如果用户处于非活动状态 X 分钟(由 check_session.php 确定),他们将被注销。

服务器端的东西工作正常。实际上,现有的 javascript 似乎也可以正常工作,但看起来需要清理。

这是现有的javascript:

function checkSessionStatus() 
{ 
    session_http.open('GET', '/check_session.php', true); 
    session_http.onreadystatechange = handleSessionHttpResponse; 
    session_http.send(null); 
}

function handleSessionHttpResponse() 
{ 
    if (session_http.readyState == 4) 
    { 
        results = session_http.responseText; 
        if (results == 'inactive') 
        {
            window.location='/logout.php';
            document.getElementById('session_divbox').innerHTML = results; 
        }
    }
}

function get_session_HTTPObject() 
{
    var xml_session_http; 
    if (!xml_session_http && typeof XMLHttpRequest != 'undefined') 
    { 
        try 
        { 
            xml_session_http = new XMLHttpRequest(); 
        } 

        catch (e) 
        { 
            xml_session_http = false; 
        } 
    } 
    return xml_session_http; 
} 
var session_http = get_session_HTTPObject(); 

function init_page_header() 
{
    window.setInterval( 'checkSessionStatus();',  30000);
}

对于它正在做的事情来说,这似乎非常漫长。

我仍在学习 jquery,并且能够执行一些基本的 ajax 调用,比如这个,它将返回值放在一个 div 中:

$(document).ready(function() 
{
    $('#users_online').load('/show_users_online.php');
    var refreshId = setInterval(function() 
    {
        $('#users_online').load('/show_users_online.php');
    }, 2000);
    $.ajaxSetup({ cache: false });
});

第一段代码的问题是它返回一个“inactive”值,然后由客户端执行(窗口重定向)。

是否有可能在 Jquery 中做到这一点而无需结束数十行代码?我可能已经知道如何做到这一点,并且没有只见树木不见森林——这里的一些指导值得赞赏。

4

1 回答 1

2

即使它非常吸血鬼的问题风格,也应该看起来像

$.get('/check_session.php', function( data ) {
    if( data === 'inactive' ) { 
        window.location='/logout.php';
        document.getElementById('session_divbox').innerHTML = data;
    }
});
于 2012-12-20T15:30:13.913 回答