2012-04-16 146 views
1

在我的JavaScript我有一些AJAX请求$.getJSON({...})各种操作。我有一个PHP应用程序来处理这些Ajax请求。在处理实际请求之前,我的应用程序首先检查会话,如果用户尚未登录,它会发送刷新信号。喜欢的东西:
浏览器忽略来自ajax响应的标题刷新

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

但客户实际上并不刷新。当涉及到AJAX请求和http刷新标题时,有什么我错过了吗?

回答

4

AJAX请求不会影响浏览器,直到告知这样做。意思是,如果我使用AJAX获取页面,它会被返回,也许存储在一个变量中,就是这样。之后它什么都不做。您需要解析返回数据并据此采取行动。

就你而言,你可能更愿意返回类似JSON的东西,让客户端解析返回数据的含义,然后采取相应措施。

我倾向于这样做:

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

这并非完全如此。例如,如果没有进一步的客户端处理需要,通过ajax请求发起,下载将立即发生。标题可以改变客户端的行为。 – Endophage 2012-04-16 05:42:22

+0

@Endophage我在想同样的事情。我很好奇浏览器是否有一些他们在AJAX请求期间不会忽略的头文件列表? – 2012-04-16 05:45:46

+0

[这个答案](http://stackoverflow.com/a/1534662/575527)指出了重定向,并使用JSON而不是一个hacky的方法。 – Joseph 2012-04-16 05:46:48

0

所以文件您在您的请求调用包含标题(“刷新:0;”); ?因为没有任何效果可言,我会做的是,如果用户不图回报的唯一的字符串,像这样记录的:

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

,然后在你的AJAX请求,检查它们是否登录

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