使用Python、jQuery和AppEngine在按钮点击时(HTTP POST)进行重定向
我有一个简单的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调用后管理重定向请求。