jQuery $ .post()を使用してフォームからフラスコ関数にデータを送信します。この関数は、長時間実行しているデータを計算します。この場合、私はいくつかのHTMLを返送するのではなく、むしろ新しいテンプレートをレンダリングします。どうすればjQuery/AJAXで関数を呼び出すことができますか?
フォーム:フォームの入力に
<form id='myform'>
<input type='text'> some input...
<input type='button' value='send form' id='mybutton'>
</form>
計算に時間がかかるので、私はjQueryを使ってそれを送信:フラスコ中で
$.("#mybutton").click(function() {
// get the data in form
$exampledata = 'foo'
$.post("/some/flask/function", {'data': $exampledata}, function(response) {
can I render a new template here with data from flask function?
});
});
を、対応する関数は次のようになります。
@app.route('/some/flask/function', methods=['POST'])
def longCalculation():
form = request.form
data = form['data']
result = runTheLongCalculation(data)
this does not work -->
return render_template('result.html',r=result)
how can I render a new template after an jQuery/AJAX call?
私はリダイレクトURLとJSONを送り返したくないのですが、実際にはテンプレートをレンダリングします。
これはうまくいくはずです。問題は: '結果'が大きく複雑です。テンプレート付きのテーブルに簡単に置くことができます。しかし、Python /フラスコ関数で長いHTML出力をコンパイルするのは良いことではないでしょう... –
一般的なこと:AJAXリクエストの後に生成されたデータを保存して(たくさんの)次のリクエスト(つまり、$ .postコールバック内の単純なwindow.location.replace())。 –
より一般的には、データを計算/生成し、ローカルに(サーバー側、memcachedやredis、またはディスクなどの一時的なストアに)保存し、特定のパラメータ(IDなどの別のページ)にリダイレクトすることができます。その計算結果を通常のWebページとして表示します)。 しかし、AJAX呼び出しで大量のデータを送信することには何も問題ありません。すべての目的と目的で、「通常の」HTTP要求と全く同じ働きをします。 –