Tôi gửi dữ liệu từ một biểu mẫu với jQuery $ .post() đến một hàm bình. Hàm này thực hiện một số phép tính dài chạy dữ liệu. Trong trường hợp này, tôi không muốn gửi lại một số HTML mà đúng hơn là hiển thị một mẫu mới. Làm thế nào tôi có thể làm điều này khi tôi gọi hàm với jQuery/AJAX?
Hình thức:
<form id='myform'>
<input type='text'> some input...
<input type='button' value='send form' id='mybutton'>
</form>
Tính toán vào mẫu đầu vào mất một thời gian, vì vậy tôi gửi nó với 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?
});
});
Trong bình, chức năng tương ứng như sau:
@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?
Tôi không muốn gửi lại URL chuyển hướng và JSON, nhưng thực sự hiển thị mẫu.
Điều đó sẽ hiệu quả. Vấn đề là: 'Kết quả' là lớn và phức tạp. Thật dễ dàng để đặt nó trong một bảng với một mẫu. Nhưng nó sẽ không được tốt đẹp để biên dịch đầu ra HTML dài trong chức năng Python/bình ... –
Tổng quát hơn: Bạn có một ý tưởng về cách tốt nhất để lưu (nhiều) dữ liệu được tạo ra sau khi yêu cầu AJAX và truy cập nó từ yêu cầu tiếp theo (ví dụ: window.location.replace đơn giản() trong lệnh gọi $ .post). –
Nói chung, bạn có thể tính toán/tạo dữ liệu, lưu trữ cục bộ (phía máy chủ, lưu trữ tạm thời như memcached hoặc redis hoặc thậm chí vào đĩa) và chuyển hướng đến một trang khác với thông số cụ thể (ID hoặc tương tự cho tính toán) sau đó hiển thị kết quả dưới dạng trang web thông thường. Tuy nhiên, không có gì sai khi gửi nhiều dữ liệu qua một cuộc gọi AJAX - cho tất cả các ý định và mục đích nó hoạt động giống như một yêu cầu HTTP "bình thường". –