防止表单提交后下载取消Ajax操作
我有一个按钮[下载文档],它完成以下两项功能:防止表单提交后下载取消Ajax操作,ajax,jquery,post,download,Ajax,Jquery,Post,Download,我有一个按钮[下载文档],它完成以下两项功能: 进行ajax调用并用数据填充表 Post提交一份表格,其中: a。运行创建文档的后端脚本 b。以浏览器下载文档的方式将文档返回到浏览器 一个问题。postsubmit不是ajax,这意味着浏览器对待它的方式与单击链接、刷新页面或关闭窗口的方式相同,例如,它取消ajax请求,甚至没有收到响应错误 在按钮上使用.preventDefault()无效。它确实允许ajax调用(1)成功完成,但是表单没有提交,因此(2)表单永远不会提交 <fo
Post
提交一份表格,其中:
a。运行创建文档的后端脚本
b。以浏览器下载文档的方式将文档返回到浏览器post
submit不是ajax,这意味着浏览器对待它的方式与单击链接、刷新页面或关闭窗口的方式相同,例如,它取消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.
});
看来我必须
post
提交表单。但是我如何防止取消任何正在进行的ajax请求呢?在generateTable
中的成功/错误/您希望从ajax调用中获得的任何响应事件中,提交表单。document.forms[“myform”].submit()中的任意一个
或$('#myform')。提交()代码>(取决于您是想使用vanilla js还是jQuery)。不错。一个不利的方面是,正在填充的表可能很大,用户将不得不等待下载开始,但我认为这是一个可以接受的权衡。为什么在ajax之前需要移动preventDefault()
?我喜欢这是第一件事。基本上是我的代码在说,“嘿,我从这里开始做。”只是先做感觉更好。不过你是对的,没关系。我删除了它,因为它不相关。您应该添加表单属性target=“\u blank”。通过这种方式,下载可以立即开始,并且ajax调用不会被取消
$.post("/backendScript", formData, function (generatedDoc) {
console.log(generatedDoc); //yay, here's our doc! but how do we download it??
});