猿问

为什么没有办法使用Ajax请求下载文件?

在我们的应用程序中,我们需要实现以下场景:

  1. 客户发送请求

  2. 服务器处理请求并生成文件

  3. 服务器返回文件作为响应

  4. 客户端浏览器显示文件下载弹出对话框,并允许用户下载文件

我们的应用程序是基于ajax的应用程序,因此对于我们来说,发送ajax请求(就像使用jquery.ajax()function一样)非常容易和方便。

但是在googilng之后,事实证明只有在使用非ajax POST请求时才可以下载文件(如该流行的SO线程中所述)。因此,我们需要实现更丑陋,更复杂的解决方案,该解决方案要求form使用嵌套的隐藏字段来构建HTML结构。

有人可以用简单的词来解释为什么不能使用ajax请求来下载文件吗?其背后的机制是什么?


繁星淼淼
浏览 933回答 3
3回答

LEATH

与AJAX无关。当然,您可以使用AJAX下载文件。但是,文件将保留在内存中,即您无法将文件保存到磁盘。这是因为JavaScript无法与磁盘交互。那将是一个严重的安全问题,并且在所有主流浏览器中都被阻止。

墨色风雨

您可以通过在下载页面中使用隐藏的iframe来实现只需在ajax成功响应中设置隐藏的ifame的src,任务就完成了...  $.ajax({        type: 'GET',        url: './page.php',        data: $("#myform").serialize(),        success: function (data) {          $("#middle").attr('src','url');        },});
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答