Wysyłam dane z formularza za pomocą jQuery $ .post() do funkcji kolby. Funkcja wykonuje pewne długie obliczenia danych. W takim przypadku nie chcę wysyłać kodu HTML, ale renderować nowy szablon. Jak mogę to zrobić, gdy wywołuję funkcję z jQuery/AJAX?
Postać:
<form id='myform'>
<input type='text'> some input...
<input type='button' value='send form' id='mybutton'>
</form>
Obliczanie na wejściu formy zajmuje trochę czasu, więc wyślę go z 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?
});
});
W kolbie, odpowiednia funkcja wygląda tak:
@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?
Nie chcę odsyłać przekierowania i JSON-a, ale faktycznie renderować szablon.
To zadziała. Problem polega na tym, że "wynik" jest duży i złożony. Łatwo jest umieścić go w tabeli z szablonem. Ale nie byłoby dobrze skompilować długie wyjście HTML w funkcji Python/flask ... –
Bardziej ogólne: Czy masz pomysł na temat najlepszego sposobu na zapisanie (dużo) danych wygenerowanych po żądaniu AJAX i uzyskanie dostępu do niego z poziomu następne żądanie (np. proste window.location.replace() w wywołaniu zwrotnym $ .post). –
Mówiąc ogólniej, możesz go obliczyć/wygenerować dane, zapisać lokalnie (po stronie serwera, do jakiegoś tymczasowego sklepu, np. Memcached lub redis, a nawet na dysku) i przekierować na inną stronę z określonym parametrem (identyfikator lub podobne dla obliczenia), które następnie pokazują wynik jako normalną stronę internetową. Jednak nie ma nic złego w wysyłaniu dużej ilości danych za pośrednictwem wywołania AJAX - dla wszystkich celów i celów działa tak samo jak "normalne" żądanie HTTP. –