<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>
龙卷风代码: class MainHandler(BaseHandler): @ tornado.web.authenticated def get(self): 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数据。
答案 0 :(得分:4)
您正在使用AJAX来检索页面,而不是命令。
想象一下,您打开了一个网页,然后想要从另一个页面获取数据。您在新选项卡中打开该页面,服务器端告诉它重定向到“/”,因此您在第二个选项卡中发现自己处于index.html
,但第一个选项卡保留在同一位置。
这正是您的AJAX正在做的事情。你告诉它要获取页面的内容,当该页面发送重定向顺序时,它只是获取请求被重定向到的页面内容并返回它。
由于这个原因,AJAX返回200
状态代码表示成功,而不是301
重定向代码。什么是更好的解决方案,是让您的服务器回复唯一响应,浏览器可以识别并重新定向。一个例子可能是输出一个简单的字符串,例如redirect
,它永远不会出现在有效的输出中。然后可以适当地更改jQuery:
success: function(msg){
if (msg=='redirect') {
//Redirect to the index
}
else {
console.log(msg);
}
}
如果合适,这将重定向,否则输出到日志。