1 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個贊
這里的問題是,您應(yīng)該在提交表單時使用 AJAX。AJAX 主要是在后臺與服務(wù)器通信,但您正試圖將其用作以編程方式提交 POST 表單數(shù)據(jù)的工具。使用 AJAX 將向服務(wù)器發(fā)送請求,就像單擊鏈接或提交表單一樣,但瀏覽器不會導(dǎo)航到結(jié)果。這就是為什么您得出的結(jié)論是flask 跳過了render_template調(diào)用,但模板確實(shí)得到了渲染。只是通過 AJAX 調(diào)用,回復(fù)只會在 AJAX 成功回調(diào)中結(jié)束,而不是在瀏覽器的主窗口中。
對于這樣的 AJAX 請求,不需要發(fā)回 HTML。例如,您可以簡單地 return "update successful"。
您可以通過從客戶端手動重定向到結(jié)果頁面來修復(fù)現(xiàn)有代碼:
// in your $.ajax() options:
success: function(reply) {
if (reply == "update successful") location = "/table"; // URL of table view
else alert("server reports error");
}
在 AJAX 調(diào)用成功更新服務(wù)器上的 CSV 文件后,這將在客戶端上重定向。
但是,您可以簡單地提交實(shí)際表單:
<form id="tableDataForm" method="post" action="{{url_for('update_file')}}">
<input type="hidden" name="data" id="tableData">
</form>
$("#update").on('click', function(){
$('#tableData').val($('#my_id').table2csv()); // insert data into hidden <input>
$('#tableDataForm').submit(); // send POST request
});
這就是你所需要的?,F(xiàn)在瀏覽器會再次顯示flask發(fā)回的回復(fù)。
添加回答
舉報