浏览器忽略来自ajax响应的标头刷新

时间:2012-04-16 05:35:30

标签: php javascript html ajax http

在我的javascript中,我有一些针对各种操作的ajax请求$.getJSON({...})。我有一个处理这些ajax请求的php应用程序。在处理实际请求之前,我的应用程序首先检查会话,如果用户尚未登录,则会发回刷新信号。就像是:

if (not logged in) {
header('Refresh: 0;');
}
else {
//process request
}

但是客户端实际上并没有刷新。在涉及到AJAX请求和http刷新标题时,我有什么遗漏吗?

2 个答案:

答案 0 :(得分:4)

AJAX请求在被告知之前不会影响浏览器。意思是,如果我使用AJAX获取页面,它会被返回,可能存储在变量中,就是这样。之后它什么也没做。您需要解析返回数据并采取相应措施。

在您的情况下,您可能宁愿返回类似JSON的内容,让客户端解析返回数据的含义,并采取相应措施。

我倾向于做类似的事情:

{
    "directives": {
        //contains directives what to do first before parsing the data
        "whatToDo" : "redirect" 
    },
    "payload" : {
        //actual page data
    }
}

答案 1 :(得分:0)

因此,您的请求中的调用文件包含标题('Refresh:0;'); ?因为那根本没有效果,我要做的是如果用户没有登录则返回一个如此唯一的字符串:

if (not logged in) {
    echo "NOTLOGGEDIN";
}
else {
    //process request
}

然后在您的AJAX请求中检查他们是否已登录:

$.get("someURL", function(data) {
    if(data == "NOTLOGGEDIN"){
        //Do something
    } else{
        //Display data
    }
});