2008-10-31 71 views
3

我有一個應用程序,其中大多數請求通過AJAX提交,但有些通過「常規」HTTP請求提交。如果請求被提交,用戶的會話超時,將返回以下JSON:檢測瀏覽器加載的JSON

{"authentication":"required"} 

JavaScript函數它提交所有的AJAX請求處理通過顯示一個彈出消息,將用戶重定向到登陸該響應頁。然而,當一個非AJAX請求收到這個響應時,由於響應是由瀏覽器直接處理的(即前面提到的JavaScript函數被繞過),所以JSON只是簡單地顯示在瀏覽器中。顯然,這並不理想,我希望接收此響應的非AJAX請求的行爲與AJAX請求的行爲相同。爲了實現這一點,我可以想到2個選項:

  1. 瀏覽應用程序並將所有請求轉換爲AJAX請求。這會工作,但也可能需要很長時間!

  2. 上面顯示的JSON是由一個非常簡單的JSP生成的。我想知道是否可以將JavaScript事件處理程序添加到該內容在瀏覽器中顯示之前運行的JSP中 - 我假設這永遠不會被AJAX請求調用?該處理程序可以調用顯示彈出窗口並執行重定向的其他JavaScript代碼。

如果有誰知道我究竟是如何能實現我在(2)中列出的處理程序,或者有其他可能的解決方案,我會很感激,如果他們願意把它們。

乾杯, 唐

回答

1

不能在處理程序添加到JSP的方式。您添加的任何內容都將使其成爲非JSON生成頁面。

我可以看到兩個選項: 通過將URL參數附加到修改輸出的屏幕上來向頁面添加參數。

網址:http://domain/page.jsp?ajaxRequest=true 將輸出JSON只有

網址:http://domain/page.jsp 會顯示一個JSP頁面,可以轉發到另一個頁面。

OR

變化的響應具有在JSP轉發代碼將通過Web瀏覽器,如果它是直接命中得到執行。然後讓你的AJAX調用去掉轉發代碼,然後處理剩下的東西。

3

3)改變你的AJAX代碼,添加一個變量的GET或POST:outputJson=1

0

4)閱讀'接受'請求HTTP頭。

然後,在服務器端定製輸出:

例如,

if(Accept contains application/json...) { // client asking for json, likely to be XHR 
    return {"foo":"bar"} 
} else { // other 
    return "Location: /login-please"; 
} 
0

開始使用更智能的錯誤信息,如:

{"error":"authentication required"} 

裹在回調的JSON輸出:

errorHandler({"error":"authentication required"}); 

有一個處理程序腳本等待:

function errorHandler(r) { 
    alert(r.error); 
} 

而且不要忘記森作爲text/javascript而不是application/x-json