我有一个按钮[下载文档],它执行以下两件事:
- 进行 ajax 调用并用数据填充表。
Post
提交一个表格:一种。运行创建文档的后端脚本
湾。以浏览器下载文档的方式将文档返回给浏览器。
一个问题。提交不是 ajax,这post
意味着浏览器将其视为单击链接、刷新页面或关闭窗口的方式,例如它取消 ajax 请求甚至没有得到响应错误。
在按钮上使用.preventDefault()
不起作用。它确实允许 ajax 调用 ( 1 ) 成功完成,但是没有提交表单,因此 ( 2 ) 永远不会提交表单。
<form action="/backendScript" method="post">
<input type="submit" value="Download Document">
</form>
$(".downloadBtn").on("click", function (e) {
generateTable();
e.preventDefault(); // without this, the ajax in generateTable(); is cancelled, but with it, the form isn't submitted.
});
使用 ajax执行 ( 2post
)也不起作用。它可以完成 ( 2.a ),但返回的文档直接转到 Javascript,而不是浏览器,并且 Javascript 无法引发下载事件,因此 ( 2.b ) 使用这种方法失败。
$.post("/backendScript", formData, function (generatedDoc) {
console.log(generatedDoc); //yay, here's our doc! but how do we download it??
});
所以看起来我必须 post
提交表格。但是如何防止这种情况取消正在进行的任何 ajax 请求呢?