当Ajax调用调用时,PHP触发下载不起作用

时间:2018-04-16 12:00:15

标签: php ajax http-headers

我构建了一个小的PHP脚本,通过定义相应的标题创建Excel电子表格并强制下载。当我直接通过其URL调用此脚本时(甚至通过带有window.location.replace的JS),一切正常。 现在,当我通过Ajax调用(同步和异步)调用相同的脚本时,没有任何反应。

有人可以解释这种行为吗?

关心塞巴斯蒂安

1 个答案:

答案 0 :(得分:1)

AJAX请求在后台处理,因此下载标题将被忽略并仅传递给您的回调。

如果您想强制下载文件而不将其重定向到您可以

的页面
  • 将iframe注入页面并将下载URL作为src-parameter
  • 传递
  • 使用a-tag链接到下载网址,并将HTML5 download-attribute添加到其中
  • 将ajax-request base64-encoded的结果作为src参数注入一个注入的a-tag并传递一个download-parameter。

将网址https://stackoverflow.com/下载为“stackoverflow.html”的示例:<a href="https://stackoverflow.com/" download="stackoverflow.html">Click me!</a>

将文本“test”下载为“file.txt”的示例: <a href="data:text/plain;base64,dGVzdA==" download="file.txt">Click me</a>(其中dGVzdA==是“test”base64-encoded)

注入两个标签后,您可以使用例如jQuery模拟用户点击它们。