我正在我的应用程序中下载动态文件,使用 iframe 模拟 ajax。我正在做的是,当发出下载请求时,我将创建一个动态的不可见 iframe,并将 iframe 的 src 设置为下载网址。我能够成功下载文件,但要求是显示下载一旦下载开始,指示器就会在下载对话框出现后立即完成。我在 iframe 创建后提供了回调以显示下载指示器,该指示器正在成功工作,并在 iframe 的“onload”上提供了另一种方法,期望当下载对话框出现时,它将被调用。但不幸的是,这不起作用,因此即使下载完成后,我的进度指示器仍然存在。我无法删除它。然后我开始意识到,由于响应的内容类型不是 html,它将由一个单独的进程提供服务,这会导致下载对话框,因此我的 onload 方法永远不会被调用。请让我知道这个问题的解决方案。
我创建了jQuery 文件下载插件 (Demo)这也解决了问题并提供了一些其他不错的功能。它基本上为您提供了“完全类似 Ajax”的文件下载体验(甚至包含回调),这通常是文件下载不可能实现的。它的工作原理与 iframe 的其他一些答案非常相似,但有一些我发现非常方便的很酷的功能:
- 用户永远不会离开他们发起文件下载的同一页面,无论下载成功还是有错误
- successCallback 和 failedCallback 函数允许您明确了解任一情况下的 UI 行为
- 与 jQuery UI 结合,开发人员可以轻松地显示一个模式,告诉用户正在下载文件,在下载开始后取消该模式,甚至以友好的方式通知用户发生了错误。请参阅Demo举个例子。
这是使用该插件的简单用例演示source与承诺。这演示页面还包括许多其他“更好的用户体验”示例。
$.fileDownload('some/file.pdf')
.done(function () { alert('File download a success!'); })
.fail(function () { alert('File download failed!'); });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)