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 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 データを取得するだけです。

4

1 に答える 1

4

コマンドではなく、AJAXを使用してページを取得しています。

Webページを開いていて、別のページからデータを取得したいとします。そのページを新しいタブで開くと、サーバー側が「/」にリダイレクトするように指示しているためindex.html、この2番目のタブが表示されますが、最初のタブは同じ場所に残ります。

これはまさにあなたのAJAXが行っていることです。ページのコンテンツを取得するように指示しました。そのページがリダイレクトオーダーを送信すると、リクエストがリダイレクトされたページのコンテンツを取得し、代わりにそれを返します。

このため、AJAXは、リダイレクト200のコードではなく、成功のステータスコードを返します。301より良い解決策は、ブラウザが適切に認識してリダイレクトできる一意の応答でサーバーに応答させることです。この例としてredirect、有効な出力に単独で表示されることのない、などの単純な文字列を出力する場合があります。次に、jQueryを適切に変更できます。

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

これは、適切な場合はリダイレクトするか、そうでない場合はログに出力します。

于 2012-08-31T00:32:33.547 に答える