2017-01-18 5 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')) 

何もボタンを押すに起こっていません。あなたの助けが必要です。

+0

オンクリックポストは実際に発砲していますか? 投稿リクエストに何が起きているのかについては、デベロッパーツールのネットワークログを確認してください。 –

+0

@davidcakoええと、app.pyにprint( "POST")を追加すると、 –

+0

POSTのために起こったのでしょうか?私はそれを修正する方法がわからない –

答えて

0

AJAX/jqueryを使用してリクエストを行っているからです。サーバー側のリダイレクトは決して機能しません。

最善の解決策は、単にクライアント側のコールバック関数を設定することです:

HTMLベースのPOSTを使用して
$.post('/test', {'test':'test'}, function(data){ 
    window.location = data.redirect; 
}); 

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

はまた、あなたがやりたいだろうが、私はあなたがしたいと確信しています何か理由でjqueryを使ってそれを行う方法を学ぶ。

申し訳ありませんが、なぜ私はこれを以前に逃したのか分かりません。

+0

ありがとう、私はそれを試してみます。確かにこれは動作します。私は別の質問があります。誤ったログイン/パスが発生した場合に再度ログインページにリダイレクトすると、リダイレクトを伴うポストリクエストの取得があります。エラーに関する情報を表示したい場合はどうすればいいですか?私はコールバック関数でこれを行うことはできません。リクエストを受け取るまで、秒で表示されるからです。そして、私は明確なログインページを持っています。 –

+0

通常、ログインページにはHTMLフォームベースのPOSTが使用されます。 しかし、これがAJAXであることが絶対必要であれば、受信した応答データ(関数(データ)の "data"引数)をコールバックすることができます。あなたに叫ぶか、あなたを実際の*ログイン状態にリダイレクトするかを指定します。 レスポンスには 'data.redirect'フィールドが含まれています(ブラウザーがそれに続くのではないにもかかわらず)ので、サーバー側のリダイレクトを保持する必要がある場合でも、その値を動的に使用できます。つまり、' window.location = data 。 –

関連する問題