我正在我的应用程序中下载一个动态文件,使用 iframe 模拟 ajax。我正在做的是,当下载请求发出时,我将创建一个动态的不可见的 iframe,并将我的 iframe 的 src 设置为下载 url。我能够成功下载文件,但要求是显示下载一旦下载开始指示器,下载对话框一出现就应该完成。我在 iframe 创建后提供回调以显示下载指示器,它正在成功工作,并在 iframe 的“onload”上提供了另一种方法,期待当下载对话框出现时,它将被调用。但不幸的是,这不起作用,因此即使在下载完成后,我的进度指示器仍然存在。我无法删除它。然后我开始意识到,由于响应的内容类型不是 html,它将由一个单独的进程提供服务,这会导致下载对话框,因此我的 onload 方法永远不会被调用。请让我知道解决方案。
最佳答案
我创建了 jQuery File Download plugin ( Demo ) 这也解决了问题并提供了一些其他不错的功能。它基本上为您提供了文件下载通常不可能实现的“完全类 Ajax”体验(甚至包括回调)。它的工作方式与 iframe 的其他一些答案非常相似,但有一些我发现非常方便的很酷的功能:
- 无论下载成功还是出错,用户都不会离开他们启动文件下载的同一页面
- successCallback 和 failCallback 函数允许您明确说明两种情况下的 UI 行为
- 与 jQuery UI 结合使用时,开发人员可以轻松地显示一个模态,告诉用户文件下载正在进行,在下载开始后取消模态,甚至以友好的方式通知用户发生了错误。查看Demo举个例子。
这是一个使用插件 source 的简单用例演示与 promise 。 demo page还包括许多其他“更好的用户体验”示例。
$.fileDownload('some/file.pdf')
.done(function () { alert('File download a success!'); })
.fail(function () { alert('File download failed!'); });
关于html - Ajax 文件下载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1538741/