Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止表单提交后下载取消Ajax操作_Ajax_Jquery_Post_Download - Fatal编程技术网

防止表单提交后下载取消Ajax操作

防止表单提交后下载取消Ajax操作,ajax,jquery,post,download,Ajax,Jquery,Post,Download,我有一个按钮[下载文档],它完成以下两项功能: 进行ajax调用并用数据填充表 Post提交一份表格,其中: a。运行创建文档的后端脚本 b。以浏览器下载文档的方式将文档返回到浏览器 一个问题。postsubmit不是ajax,这意味着浏览器对待它的方式与单击链接、刷新页面或关闭窗口的方式相同,例如,它取消ajax请求,甚至没有收到响应错误 在按钮上使用.preventDefault()无效。它确实允许ajax调用(1)成功完成,但是表单没有提交,因此(2)表单永远不会提交 <fo

我有一个按钮[下载文档],它完成以下两项功能:

  • 进行ajax调用并用数据填充表
  • 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??
        });