2017-01-18 23 views
2

好重定向, 我有上点击POST方法瓶不上POST方法

<button class="btn btn-lg btn-primary btn-block" onclick="$.post('/test',{'test':'tset'})">Home</button> 

和瓶的应用程序,其中包含此代码按下按钮

@app.route('/') 
def index(): 
    return render_template("index.html") 

@app.route('/test', methods=['POST']) 
def test(): 
    return redirect(url_for('index')) 

没有happend一个按钮。我需要你的帮助。

+0

onclick帖子实际上是否正在发射? 检查您的网络登录开发人员工具,以了解发生了什么请求。 –

+0

@davidcako是啊,如果我添加打印(“POST”)在app.py,它的工作原理 –

+0

也许这是因为POST?我不知道如何修复它 –

回答

0

这是因为您使用AJAX/jQuery进行请求。服务器端重定向将无法工作。

最好的解决方法就是设置客户端回调函数:

$.post('/test', {'test':'test'}, function(data){ 
    window.location = data.redirect; 
}); 

https://api.jquery.com/jquery.post/

使用基于HTML-POST也将做你想做的,但我敢肯定,你想要学习如何用jquery做这件事是有原因的。

对不起,我不知道为什么我错过了这一点。

+0

谢谢,我会试试看。当然这会奏效。我有另一个问题。如果登录/传递不正确,当我再次重定向登录页面时,发送后请求重定向。如果我想显示一些关于错误的信息,该怎么办?我不能在回调函数中执行此操作,因为它会在一秒之内显示出来,直到收到请求。然后我有明确的登录页面。 –

+0

您通常会有一个登录页面使用基于HTML表单的POST。 但是,如果有这样的事情需要AJAX,你可以总是有一个回调函数,它接收到响应数据(这是“函数(数据)”中的“数据”参数)并且决定无论是对你大吼,还是将你重定向到*登录状态。 响应仍然包含'data.redirect'字段(尽管浏览器没有遵循它),所以如果你需要保留重定向服务器端,你仍然可以动态使用该值,即'window.location = data .redirect'。 –