使用Python、jQuery和AppEngine在按钮点击时(HTTP POST)进行重定向

2 投票
1 回答
1195 浏览
提问于 2025-04-17 22:06

我有一个简单的AppEngine应用程序,其中有一个文件叫做 WebInterface.py,它负责把用户引导到正确的页面,代码如下:

import webapp2
from handlers import MainHandler
from handlers import PageOneHandler
from handlers import PageTwoHandler

app = webapp2.WSGIApplication([
    ('/', MainHandler),
    ('/pageOne', PageOneHandler),
    ('/pageTwo', PageTwoHandler)
], debug=True)

还有另一个文件 handlers.py,里面包含了所有的请求处理器,这些处理器负责向用户展示页面,代码如下:

import webapp2

class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('Hello, You are in the Main Page!')

class PageOneHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('Hello, You are in the First Page!')
        self.response.write('<br><html><head><script     src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script></head>    <body>')
        self.response.write('<button id="btn" onClick="doAction()">Click Me')
        self.response.write('</button><p id="demo"></p>')
        self.response.write('<script>')
        self.response.write('function doAction()')
        self.response.write('{document.getElementById("demo").innerHTML="Hello World";')
        self.response.write('var data = {')
        self.response.write('user : "UserName", pwd : "Password"')
        self.response.write('};')
        self.response.write('jQuery.post("/pageOne", data);')
        self.response.write('}')
        self.response.write('</script>')
        self.response.write('</body></html>')

    def post(self):
        self.redirect('/pageTwo')

class PageTwoHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('Hello, You are in the Second Page! Get method')
    def post(self):
        self.response.write('Hello, You are in the Second Page! Post method')

好吧,当我尝试访问这三个页面中的任何一个时,结果都是我预期的。例如,如果我在浏览器中输入这个地址: http://localhost:13080/,我会看到主页。如果我输入这个地址: http://localhost:13080/pageOne,我会看到第一页;如果我输入这个地址: http://localhost:13080/pageTwo,我会看到第二页,都是正常的。

现在,我的问题是,当我在第一页点击 Click Me 按钮时,HTTP POST 请求被发送,PageOneHandler 的 post 方法被执行,这个方法应该把我重定向到 pageTwo,而且确实执行了!我们可以在控制台看到证据:

INFO     2014-03-13 10:36:47,831 module.py:612] default: "GET /pageOne HTTP/1.1" 200 405
INFO     2014-03-13 10:37:08,606 module.py:612] default: "GET /pageOne HTTP/1.1" 200 409
INFO     2014-03-13 10:37:32,065 module.py:612] default: "POST /pageOne HTTP/1.1" 302 -
INFO     2014-03-13 10:37:32,090 module.py:612] default: "GET /pageTwo HTTP/1.1" 200 45

但是我仍然停留在同一页面(/pageOne)。所以我为什么没有看到 pageTwo 的 get 方法中的内容呢?

谢谢。

1 个回答

0

简单来说,如果你在浏览器里发起一个 POST 请求,而不是用 jQuery.post(),那么会发生重定向。举个例子,如果你有一个 <form action="/pageOne" method="post">... 表单,直接提交这个表单而不使用JavaScript,你会发现最后会跳转到 pageTwo。但是如果你用JavaScript来处理这个请求,它就不会自动改变 location

如果你还是想尝试你的方法,可以看看 如何在jQuery Ajax调用后管理重定向请求

撰写回答