html - Ajax 文件下载问题

标签 html ajax iframe download

我正在我的应用程序中下载一个动态文件,使用 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/

相关文章:

javascript - 在 contentEditable div 中标记的方法

javascript - 将此 javascript 对象从 jQuery 传递到 PHP?

javascript - 如何在 Chrome 扩展程序中控制注入(inject)内容脚本的 (i)frame 深度?

HTML img 标签 : title attribute vs. alt 属性?

javascript - jquery 递增索引输入数组

javascript - 重新加载 div javascript 只需要 ajax 吗?

javascript - 在 IE 中显示 iframe 中的 blob 失败

php - 缩小移动设备上的网页版本

javascript - 滚动()变得很大滞后

javascript - 使用 CSS 和 Javascript 的制表符要求