如何检测javaScript中的下载完成

时间:2016-11-02 16:31:57

标签: javascript

我想在一个javaScript函数中执行两个操作

  1. 强制下载csv文件

  2. 发送ajax请求以标记下载记录的表中的记录。

  3. 由于这两个操作都会向用户显示提示和对话框,我想延迟执行第二个事件,直到第一个事件完成。

    当用户打开页面时,会显示一个当前记录列表。他们检查他们希望处理的记录。然后打包检查的记录,并向用户显示下载“保存”或“打开”框。当该操作完成时,应执行ajax请求。

    我的想法是我可以检测到从文档中删除“a”的时间。但我不确定我会怎么做。

    以下是我的下载代码

        var a = window.document.createElement('a');
        a.href = window.URL.createObjectURL(new Blob(exportArray, {type: 'text/csv'}));
        a.download = 'jobCostHandOff.csv';
    
        // Append anchor to body.
        document.body.appendChild(a)
        a.click();
    
        // Remove anchor from body
        document.body.removeChild(a)
    

1 个答案:

答案 0 :(得分:0)

我已在Web应用程序中实现了这样一种机制,具有以下工作流程:

  • 用户在其计算机上选择文件
  • 他们配置应用的选项
  • 点击提交按钮
  • 加载程序开始动画客户端
  • 浏览器将整个表单发送到服务器进行处理
  • 处理(实际上是关于将吉他乐谱转换为乐谱)产生文本/普通文件,该文件存储在服务器上(但尚未发送):发送带有生成文件链接的小JSON背部。 JSON数据表示成功或错误。如果出现错误,则会向用户显示该消息。如果成功,则status字段设置为OK,有效负载包含文件的链接。
  • 处理AJAX调用的JS代码成功后会触发下载。
  • 浏览器向用户显示通常的(例如在Firefox中)"打开或保存文件"对话框
  • Web应用程序检测到对话框的打开并隐藏了加载程序。

看起来非常类似于你的需要。

解决方案的要点是:

  • 通过设置页面中隐藏的src的{​​{1}}属性来触发文件下载
  • 服务器发送cookie以响应对要下载的文件的请求
  • 计时器上的JS代码检查文档的cookie(非常幸运的是,它包含了iframe的cookie),并且在看到" Holy cookie"时,确定文件下载已经启动,这是代码可以抓取的唯一事件。

快速查看我的网络应用程序的PHP代码,我看到了:

iframe

您有JS代码的名称,该代码执行注释中的最后一个项目符号项:-)我编写注释代码的众多原因中的另一个原因...

HTH。