如何在jquery ajax调用后将文件输出到浏览器

时间:2011-09-15 11:50:44

标签: php jquery ajax header

我在网站上有一个链接到php文件的链接,该文件在飞行中生成本机excel文件,通过标题直接将其输出到浏览器,供用户打开/保存。由于生成文件需要一些时间,因此我想使用jQuery Ajax进行调用并使用一些加载动画。

我唯一不确定如何做的是在Ajax调用后如何将文件输出到浏览器中?它甚至可能吗?

3 个答案:

答案 0 :(得分:3)

N.B。这是对@dmitry的答案的解释,但刚刚详细阐述)

您遇到的问题是无法通过AJAX直接将文件返回给用户 - 浏览器必须使用正常的同步HTTP请求来请求文件。

要解决此问题,您的PHP需要:

  1. 正常生成Excel文件。
  2. 不是将文件写回用户,而是将其保存在服务器文件系统的某个位置(即使用file_put_contents()或类似文件)。
  3. 将文件路径返回给用户。
  4. 您的JS在收到此回复后将需要:

    1. 从PHP脚本中读取Excel文件路径。
    2. 使用window.open()在新标签/窗口中打开Excel文件(或通过设置location.href在当前标签/窗口中重定向)。

答案 1 :(得分:1)

我认为你可以制作一个技巧:在Ajax响应中生成文件并返回生成文件的路径,然后调用

window.location = fileUrl

还有iframe Ajax的一些技术

答案 2 :(得分:0)

为什么不在加载生成excel文件的实际php文件的地方使用iframe?这样,在生成文件时,您将不会阻止UI,浏览器将触发下载对话框。

您无法通过javascript发送文件,至少不会强制浏览器打开下载对话框。