Ajax文件下载问题

Bib*_*bin 6 html ajax iframe download

我正在我的应用程序中下载动态文件,使用iframe模拟ajax.什么我做的是,下载请求时,我将创建一个动态的无形的iframe,并设置我的iframe和下载url.I我能够成功下载该文件的src,但要求是显示下载一旦指标下载开始,且应尽快完成在下载对话框出现up.I的通话iframe的创建完成后,显示下载的指标,这是成功的工作,并提供了另一种方法在iframe的"的onload",期待当下载对话框出现时,它将被调用.但不幸的是,这不起作用,因此即使在下载完成后,我的进度指示器仍然存在.我无法删除它.然后我开始意识到,由于响应的内容类型不是html,它将由一个单独的进程提供,这导致下载对话框,因此我的onload方法永远不会被调用.请让我知道解决方案.

Joh*_*ner 15

我创建了jQuery文件下载插件(Demo),它还修复了问题并提供了一些其他不错的功能.它基本上为您提供了"完全类似于Ajax"的文件下载体验(甚至包括回调),这通常不适用于文件下载.它与iframe的其他一些答案非常相似,但有一些我发现非常方便的很酷的功能:

  • 用户永远不会离开他们发起文件下载的同一页面,无论是成功还是出错
  • successCallback和failCallback函数允许您明确说明在任一情况下UI行为
  • 结合jQuery UI,开发人员可以轻松地显示一个模式告诉用户文件下载正在发生,在下载开始后解除模式,甚至以友好的方式通知用户发生了错误.有关此示例,请参阅演示.

这是一个使用带有promises 的插件的简单用例演示.该演示页面还包含许多其他"更好的用户体验"示例.

$.fileDownload('some/file.pdf')
    .done(function () { alert('File download a success!'); })
    .fail(function () { alert('File download failed!'); });
Run Code Online (Sandbox Code Playgroud)


小智 1

当发出下载请求时,您应该在客户端中启动一个计时器,以指定的时间间隔测试 iframe 的状态:

if ( ( iframe.document && iframe.document.readyState == 'complete' )
    || iframe.contentDocument )
{
    stopTimer();
    closePopupDialog();
}
Run Code Online (Sandbox Code Playgroud)