2015-03-13 81 views
0

我使用以下ajax调用将一些数据发送到PHP页面,该页面生成一个excel文件。如果我自己运行PHP页面,假冒的数据已经归属于一个数组,它会下载文件,但如果我尝试通过ajax按钮运行php页面,则无法下载。我不确定这个问题是什么,但是当php尝试发回文件时,我得到500 Internal Server Error。请看下图:如何使用AJAX请求返回文件

请求报头:

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:选项来查看是否有其中一个产生了差异,但他们都没有。

我该如何取回这个文件?

+0

这是一个内部服务器错误。看看你的服务器端代码和你的错误日志。您无法知道是什么原因导致客户端发生内部服务器错误,这不是客户端错误。 – Quentin 2015-03-13 19:45:03

回答

0

如果你想使用ajax请求下载文件,你有两种可能性。

通过将用户重定向到下载页面,

由于skidadon pointedin评论,而不是使用POST参数使用GET参数

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

或者使用谁执行Ajax-的jquery.fileDownload库假货如文件下载体验

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

+0

我想我喜欢你要去的地方。另外,您可以将“$ _GET”参数发送到download.php脚本以告诉它要下载什么内容。 John Wu,开始接触这位先生。 – skidadon 2015-03-13 19:39:11

+0

@skidadon是的,你完全正确的只是添加它。谢谢:) – 2015-03-13 19:43:52

+0

谢谢两位。如果有另一种方法可以做到这一点,那么为什么我需要使用ajax没有具体的原因。这似乎是在互联网上非常普遍的东西......我只需要发送一组数据到php页面,然后让它下载它生成的文件.... – 2015-03-13 19:50:56

0

这不是更多钞票使用ajax(xrh请求)。

永不AJAX请求将文件下载到用户PC。

的解决方案是让无形的iframe和发布表单,然后浏览器会尊重你的头指示下载。

很抱歉在这个时候没有给你一个例子,但希望能有解决您的工作在正确的方向,从而避免浪费更多的时间进行测试。