2015-02-09 48 views
0

我想構建一個html頁面,當我輸入它時,它會將我重定向到另一個頁面,具體取決於會話中的屬性。javascript - 處理來自http響應的重定向

如果在會話中有一個名爲「username」的屬性,它不會重定向我,否則它會。

爲了做到這一點,我寫了一個javascript函數,它調用一個java servlet來檢查屬性是否存在。

<script type="text/javascript"> 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() { 
     if (req.readyState == 4) { 
      var data = req.responseText; 
     } 
     document.write(req.readyState); 
    } 
    req.open('POST','sessionCheck',true); 
    req.send(null); 
</script> 

在servlet的代碼是:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    HttpSession hs = request.getSession(); 
    String username = (String) hs.getAttribute("username"); 
    if (username == null) 
      response.sendRedirect("/login.html"); 

} 

我知道resonse確實發送重定向,但該網頁不重定向。

*注意:我正在使用Eclipse Java EE for Web Developers。

謝謝!

+0

您必須檢查迴應,然後決定是否重定向。重定向將使用JavaScript而不是服務器Servelet – Hunsu 2015-02-09 14:04:33

回答

1

Javascript AJAX請求遵循重定向。很可能您的JavaScript代碼最終要求您希望將瀏覽器重定向到的頁面。

嘗試返回頁面重定向到您的響應,然後讓瀏覽器導航到該頁面。

你可以看到XMLHttpRequest standard指出重定向將遵循:

HEADERS_RECEIVED(數值2)

所有重定向(如果有的話)進行了跟蹤,並最終響應的所有HTTP頭已收到。該對象的幾個響應成員現在可用。

+0

謝謝,但我最終做了其他事情:我使用response.senderror(401),並聲明「login.html」頁面作爲此錯誤的處理程序。 – Yuval 2015-02-09 15:53:25

+0

使用狀態碼來指示問題是理想的解決方案。 – 2015-02-09 15:57:52