2017-12-28 28 views
0

FlaskルートにAJAX投稿を作成するサイトがあります。フラスコrender_templateはAJAX投稿では機能しません

私は、応答を処理するAJAXの成功メソッドを使用する同様の質問が多いことを知っています(重複してマークしないでください)。私の単純化した例ではうまくいくはずですが、実際のコードでは、複数のテーブルにレンダリングされるデータベースから多数のデータが取り出されています。私はJavaScriptでテーブルのデータの更新をすべて書き直したくないので、実際にはテンプレートを再レンダリングするだけです。

のpython:

from flask import Flask, render_template, request 
app = Flask(__name__) 


@app.route('/', methods=['GET', 'POST']) 
def hello_world(message=None): 
    return render_template('test.html', message=message) 


app.run() 

HTML

<html> 
<head> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 

    <script> 
     $(document).ready(function() { 
      $('#mybutton').click(function() { 

       $.post(window.location.href, {'test': 'test'}); 

      }); 
     }); 

    </script> 
</head> 
<body> 
{{ message }} 
<button id="mybutton" name="mybutton" type="button">Click Me!</button> 
</body> 
</html> 

答えて

1

あなたはAJAXを通じてPOSTリクエストを送信し、要求をフラスコからJavaScriptと応答データから来ているJavaScriptオブジェクトに格納されます。ブラウザ自体は何も直接送受信しないので、ページを再レンダリングしません。

Flaskアプリケーションで別のエンドポイントを定義してPOSTリクエストのjsonデータを返し、返されたjsonデータを使用してDOMを操作する必要があります。

+0

これを行うには基本的に方法はありませんか? – user2242044

+0

私は – dvnguyen

+0

を知らないので、投稿はデータベースに挿入されているデータを送信しています。私は、(成功したか否か)を挿入してユーザーに表示した結果を保存したいと思います。テンプレートを 'post({function {){window.location.replace(window.location.href);});'で再ロードすることはできますが、成功するものを保存する方法は、リロード? – user2242044

1

[OK]をクリックして、フラスコのアプリから「はい、いいえ」のフラグを送信してください。ページリフレッシュなしで成功または失敗のメッセージを表示したいので、フラスコのアプリケーションが結果を返すときにDOMを更新するためにjqueryを取得します。あなたのフラスコのアプリに return messageのようなものがあると、 success: function(e)({ $('body').append(e);});が表示されます。私の電話では単語の長さの制限のためにもっと多くのコードを生成することはできませんが、私のコードに合わせてコードを修正すれば、仕事が終わります。乾杯!

関連する問題