2012-08-31 3 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는 301 리디렉션 코드 대신 성공을위한 200 상태 코드를 반환합니다. 더 나은 해결책은 서버가 고유 한 응답으로 회신하도록하는 것입니다. 브라우저는이를 인식하고 적절히 리디렉션 할 수 있습니다. 예를 들어 redirect과 같은 단순한 문자열을 출력 할 수 있습니다.이 문자열은 유효한 출력으로는 나타나지 않습니다. 그런 다음 jQuery를 적절하게 변경할 수 있습니다.

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

이렇게하면 적절하게 리디렉션되거나 그렇지 않으면 로그에 출력됩니다.

+0

포스트 요청을 만들기 위해 아약스 대신 다른 방법을 사용하여 자동으로 페이지를 리디렉션 할 수 있습니까? – carboncomputed

+0

당신은 AJAX에 대한 대안을 찾지 못할 것입니다. 지침이 아닌 내용을 요청할 때 사용하고 있다는 것을 명심해야합니다. 비슷한 것은 똑같이 작동합니다. – Death

+0

다음은 [리디렉션 자체를 수행하는 방법을 설명하는 답변]입니다 (http://stackoverflow.com/a/506004/1599229). – bahmait

관련 문제