【发布时间】:2019-06-12 04:01:01
【问题描述】:
我想在一个 javaScript 函数中执行两个操作
强制下载 csv 文件
发送 ajax 请求以标记表中记录已下载的记录。
由于这两个操作都会向用户显示提示和对话框,我想延迟执行第二个事件,直到第一个事件完成。
当用户打开页面时,他们会看到当前记录的列表。他们检查他们希望处理的记录。然后将检查的记录打包,并向用户显示下载的“保存”或“打开”框。当该操作完成时,应该执行 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)
【问题讨论】:
-
好建议,但它使用来自服务器的 cookie。在我的示例中,没有服务器交互。
-
@Claus:你提到了一个 Ajax 调用,这让我首先假设存在服务器交互。
-
是的,您在这方面是正确的。我可以放置一个 cookie,但我没有从服务器下载。我真正需要的是来自下载对话框的响应。客户端机器上生成的内容正在下载到用户硬盘。因此,我不仅需要知道下载何时完成,而且在我进行 ajax 调用以标记所选记录之前,用户没有从下载对话框的选项中选择取消。我认为我需要的东西不可用,所以我要两个按钮。一个用于导出,第二个用于标记记录。
-
好的,我现在明白了。如果您的日程安排中有时间,我建议您使用自定义对话框,这在如今的网页上很常见。这会给您完全控制权,但用户会感到熟悉:我不知道您有什么方法可以查询浏览器的下载对话框。请注意,例如 Chrome 没有这样的对话框。但是,我看不出“知道下载何时完成”是如何可能的,即使是通过服务器通信(正如我在最初提出的答案中所说的那样)。
标签: javascript