1 回答
TA贡献1871条经验 获得超8个赞
这里的问题是,您应该在提交表单时使用 AJAX。AJAX 主要是在后台与服务器通信,但您正试图将其用作以编程方式提交 POST 表单数据的工具。使用 AJAX 将向服务器发送请求,就像单击链接或提交表单一样,但浏览器不会导航到结果。这就是为什么您得出的结论是flask 跳过了render_template调用,但模板确实得到了渲染。只是通过 AJAX 调用,回复只会在 AJAX 成功回调中结束,而不是在浏览器的主窗口中。
对于这样的 AJAX 请求,不需要发回 HTML。例如,您可以简单地 return "update successful"。
您可以通过从客户端手动重定向到结果页面来修复现有代码:
// in your $.ajax() options:
success: function(reply) {
if (reply == "update successful") location = "/table"; // URL of table view
else alert("server reports error");
}
在 AJAX 调用成功更新服务器上的 CSV 文件后,这将在客户端上重定向。
但是,您可以简单地提交实际表单:
<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
});
这就是你所需要的。现在浏览器会再次显示flask发回的回复。
添加回答
举报