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

Pio*_*zyk 46 javascript ajax post download

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

  1. 请求从客户端发送
  2. 服务器处理请求并生成文件
  3. 服务器返回文件作为响应
  4. 客户端浏览器显示文件下载弹出对话框,允许用户下载文件

我们的应用程序是基于ajax的应用程序,因此我们发送ajax请求(如使用jquery.ajax()函数)非常简单方便.

但是在googilng之后,事实证明只有在使用非ajax POST请求时才能进行文件下载(就像在这个流行的SO线程中所描述的那样).因此,我们需要实现更加丑陋且更复杂的解决方案,这需要form使用嵌套的隐藏字段构建HTML结构.

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

fre*_*ish 59

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

  • 这似乎不正确,因为您可以使用Blob来保存文件,例如:http://stackoverflow.com/questions/19327749/javascript-blob-filename-without-link,这看起来不像一个安全问题,因为它不是直接交互,只是告诉浏览器从内存而不是从服务器下载文件. (7认同)