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

发布于 2024-12-05 06:27:59 字数 165 浏览 1 评论 0原文

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

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

I have a link on the website to a php file that generates native excel file on a fly ant outputs it directly to browser via headers for user to to open/save. Since it takes some time for the file to be generated I'd like to use jQuery Ajax to make the call and use some loading animation in the mean while.

The only thing I'm not sure how to do is how to output the file into the browser after Ajax call? Is it even possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

奈何桥上唱咆哮 2024-12-12 06:27:59

NB 这是 @dmitry 答案的释义,但只是详细说明)

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

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

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

您的 JS 在收到此响应后将需要:

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

(N.B. This is a paraphrasing of @dmitry's answer, but just elaborated upon)

The problem you have is that there is no means of directly returning a file to the user via AJAX - the browser has to request the file using a normal, synchronous HTTP request.

To solve this, your PHP will need to:

  1. Generate the Excel file as normal.
  2. Instead of writing the file back to the user, save it somewhere on the server's filesystem (i.e. using file_put_contents() or similar).
  3. Return the file path to the user.

Your JS, on receiving this response will then need to:

  1. Read the Excel file path back from the PHP script.
  2. Open the Excel file in a new tab/window using window.open() (or redirect in the current tab/window by setting location.href).
逆光飞翔i 2024-12-12 06:27:59

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

window.location = fileUrl

也可以使用 iframe Ajax 调用一些技术

I think you can make a trick: generate file and return path to generated file in your Ajax response and then just call

window.location = fileUrl

also there some techniques with iframe Ajax

墟烟 2024-12-12 06:27:59

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

您无法通过 JavaScript 发送文件,至少不能以强制浏览器打开下载对话框的方式发送文件。

Why don't you use iframe where you load the actual php file that generates the excel file? That way you won't block the UI while the file is being generated and browser will trigger download dialog.

There's no way that you can send a file via javascript, at least not in the manner of forcing the browser to open the download dialog.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文