2012-04-16 141 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 
    } 
});