可以使用jquery轻松完成这个旧式的ajax调用吗?

时间:2012-12-20 15:27:40

标签: javascript jquery ajax xmlhttprequest migration

我正在处理一些相当旧的代码,以下内容用于监控会话状态。如果用户在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中执行此操作而不需要使用几十行代码?我可能已经知道如何做到这一点,并没有看到森林的树木 - 这里的一些指导表示赞赏。

1 个答案:

答案 0 :(得分:2)

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

$.get('/check_session.php', function( data ) {
    if( data === 'inactive' ) { 
        window.location='/logout.php';
        document.getElementById('session_divbox').innerHTML = data;
    }
});