如何使用AJAX请求返回文件

时间:2015-03-13 19:04:50

标签: javascript php jquery ajax

我使用以下ajax调用将一些数据发送到PHP页面,该页面生成一个excel文件。如果我自己运行PHP页面并将假数据归结为数组,则会下载该文件,但如果我尝试通过ajax按钮运行php页面,则不会下载任何内容。我不确定问题是什么,但是当php尝试发回文件时,我得到500 Internal Server Error。见下文:

请求标题:

POST /XLS.php HTTP/1.1
Host: 127.0.0.1
Connection: keep-alive
Content-Length: 15
Pragma: no-cache
Cache-Control: no-cache
Accept: */*
Origin: http://127.0.0.1
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
Content-Type: text/plain;charset=UTF-8
Referer: http://127.0.0.1/multiLine.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,fr-FR;q=0.6,fr;q=0.4
Cookie: PHPSESSID=rd44cluc503datf36616b9e5b5; popupPartNumber=null

响应标题:

HTTP/1.0 500 Internal Server Error
Date: Fri, 13 Mar 2015 18:21:55 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.15
X-Powered-By: PHP/5.5.15
Content-disposition: attachment; filename="multiLine report 03.13.15 - .xlsx"
Content-Transfer-Encoding: binary
Cache-Control: must-revalidate
Pragma: public
Content-Length: 0
Connection: close
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

我使用的ajax是:

$.ajax({
  url: "XLS.php", 
  type: "post",
  data: {xl: xl},
  }); //closes ajax call

我已经浏览了大约7种不同的contenttype:选项,看看其中一个是否有所不同,但没有一个能做到。

如何取回此文件?

2 个答案:

答案 0 :(得分:0)

如果您希望使用ajax请求下载文件,则有两种可能性。

通过将用户重定向到下载页面来伪造它

由于skidadon指向注释而不是使用POST参数,请使用GET参数

 window.location = 'XLS.php?x1='+x1;

或者使用执行类似Ajax的文件下载体验的jquery.fileDownload库

https://github.com/johnculviner/jquery.fileDownload

答案 1 :(得分:0)

使用ajax(xrh请求)不可行。

从来没有AJAX请求会将文件下载到用户PC。

解决方案是make和invisible iframe并将表单发布到它,然后浏览器将尊重您的标题,指示下载。

很抱歉,此时没有为您提供示例,但希望能够朝着正确的方向解决您的工作,从而避免浪费更多时间进行测试。