2012-08-31 35 views
2
<html> 
<head> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.js"></script> 
<title> 
Login page 
</title> 
</head> 
<body> 
<h1 style="font-family:Comic Sans Ms;text-align"="center";font-size:20pt; 
color:#00FF00;> 
Simple Login Page 
</h1> 
<form name="login"> 
Username<input type="text" name="userid"/> 
Password<input type="password" name="pswrd"/> 
<input type="button" onclick="check(this.form)" value="Login"/> 
<input type="reset" value="Cancel"/> 
</form> 
<script language="javascript"> 
function check(form) 
{ 
    $.ajax({ 
    type: 'POST', 
    url: '/auth/login', 
    data: { 
     'UserName': form.userid.value, 
     'Password': form.pswrd.value // <-- the $ sign in the parameter name seems unusual, I would avoid it 
    }, 
    success: function(msg){ 
     console.log(msg); 
    } 
}); 
} 
</script> 
</body> 
</html> 

龍捲風代碼: 類MainHandler(BaseHandler): @ tornado.web.authenticated 高清得到(個體經營): self.render( 「index.html的」)爲什麼不按照我的龍捲風重定向請求?

class AuthLoginHandler(BaseHandler): 
    @tornado.web.asynchronous 
    def get(self): 
     self.render("login.html") 

    def post(self): 
     username = self.get_argument("UserName",strip = True) 
     password = self.get_argument("Password",strip = True) 
     user = auth_actions.do_login(db,username,password) 
     if not user: 
      raise tornado.web.HTTPError(500, "Authentication Failed") 
     self.set_secure_cookie("user", tornado.escape.json_encode(user)) 
     self.redirect("/") 

我送重定向請求,而不是瀏覽器重定向它只是獲取msg中index.html的html數據。

回答

4

您正在使用AJAX檢索頁面,而不是命令。

想象一下你有一個網頁打開,那麼你想從另一個頁面獲取數據。您在新選項卡中打開該頁面,服務器端會告訴它重定向到「/」,因此您在第二個選項卡中找到index.html,但第一個選項卡保留在相同位置。

這正是你的AJAX所做的。你已經告訴它獲取頁面的內容,並且當該頁面發送重定向命令時,它只是獲取請求被重定向到的頁面內容,然後返回該內容。

由於這個原因,AJAX返回一個200狀態碼以取得成功,而不是301代碼用於重定向。更好的解決方案是讓服務器回覆唯一的響應,瀏覽器可以識別並適當地重定向。一個例子就是輸出一個簡單的字符串,比如redirect,這個字符串在有效輸出中永遠不會出現。然後,jQuery可以進行相應的更改:

success: function(msg){ 
    if (msg=='redirect') { 
     //Redirect to the index 
    } 
    else { 
     console.log(msg); 
    } 
} 

這將在適當的情況下重定向,否則將輸出到日誌。

+0

使用ajax的替代方法發出發佈請求是否有意義,以便它會自動重定向頁面? – carboncomputed

+0

你不會找到任何替代AJAX的東西,你必須記住你正在使用它來請求內容,而不是說明。任何類似的東西都會完全一樣。 – Death

+0

這裏是[解釋如何執行重定向本身的答案](http://stackoverflow.com/a/506004/1599229)。 – bahmait