如何使用AJAX请求返回文件

我使用以下ajax调用将一些数据发送到PHP页面,该页面生成一个excel文件。 如果我自己运行PHP页面并将假数据归结为数组,则会下载该文件,但如果我尝试通过ajax按钮运行php页面,则不会下载任何内容。 我不确定是什么问题,但我得到一个 500内部服务器错误</ code>,因为php试图发回文件。 请参阅以下内容:</ p>

请求标题:</ strong> </ p>

  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,类似Gecko)Chrome / 40.0.2214.115 Safari / 537.36
内容类型: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
</ code> </ pre>

响应标头:</ strong> </ p>

  HTTP / 1.0 500内部服务器 错误
日期:星期五,2015年3月13日18:21:55 GMT
服务器:Apache / 2.4.10(Win32)OpenSSL / 1.0.1i PHP / 5.5.15
X-Powered-By:PHP / 5.5.15
Content - 配置;附件; 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
</ code> </ pre>

我正在使用的ajax是:</ p>

  $ .ajax  ({
url:“XLS.php”,
type:“post”,
data:{xl:xl},
}); //关闭ajax调用
</ code> </ pre>

我已经完成了大约7个不同的 contenttype:</ code>选项,看看其中一个是否有所不同 ,但都没有。</ p>

如何获取此文件?</ p>
</ div>

展开原文

原文

I use the following ajax call to send some data over to a PHP page, which generates an excel file. If I run the PHP page by itself with fake data already ascribed to an array, it downloads the file, but if I try to run the php page through the ajax button, nothing downloads. I'm not sure what the issue is, but I'm getting a 500 Internal Server Error as the php tries to send back the file. See below:

Request Headers:

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

Response Headers:

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

the ajax I'm using is:

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

and I've gone through about 7 different contenttype: options to see if one of those made the difference, but none of them did.

How do I get this file back?

duan97689
duan97689 这是内部服务器错误。查看服务器端代码和错误日志。您无法分辨出客户端发生内部服务器错误的原因,这不是客户端错误。
5 年多之前 回复

2个回答



使用ajax(xrh请求)不可行。</ p>

从未下载过AJAX请求 一个文件到用户PC。</ p>

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

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

展开原文

原文

This is not posible using ajax (xrh request).

Never an AJAX request will download a file to the user PC.

The solution is make and invisible iframe and post a form to it, then the browser will respect your header indicating the download.

Sorry for not having at this time an example for you, but hope to have addressed your work in the right direction and thus avoid waste more time testing.



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

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

skidadon 指出 注释而不是使用POST参数使用GET参数</ p>

  window.location ='XLS.php?x1 ='+ x1; 
</ code> </ pre>

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

https://github.com/johnculviner/jquery.fileDownload </ p>
</ div>

展开原文

原文

If you're look to download a file using an ajax request you have two possibilities.

Fake it by redirecting the user to the download page and

As skidadon pointedin comment instead of using POST parameter use GET parameter

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

Or use the jquery.fileDownload library who perform an Ajax-like file download experience

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

duande2379
duande2379 我只是改变了我的代码,使其反映出更多你的代码。 事实上,您只需要通过get更改php文件中的POST变量,例如,如果您有一个变量名称$ _POST ['x1']将其更改为$ _GET ['x1']。 完成此操作后,将您放入的javascript行替换为我给你的那一行。 它应该都工作:)
5 年多之前 回复
douji8347
douji8347 好吧,我不知道如何通过将用户重定向到下载页面来伪造它,所以我现在正在jquery.FileDownload库上阅读(那里有很多信息!)我将使用这个解决方案 如果它涉及到 - 对于一些如此简单的事情看似很多工作,就像我可以更轻松地完成所有这些......
5 年多之前 回复
dongyun6835
dongyun6835 您欢迎我们很高兴为您提供帮助,您是否已根据我的解决方案取得了您想要的成果?
5 年多之前 回复
doufuhao8085
doufuhao8085 谢谢你们两个。 如果有另一种方法可以做到这一点,我根本没需要使用ajax的具体原因。 这似乎是互联网上非常常见的东西......我只需要将一组数据发送到php页面,然后让它下载它生成的文件....
5 年多之前 回复
dongzhiyi2006
dongzhiyi2006 是的,你完全正确,只是添加它。 谢谢 :)
5 年多之前 回复
doufan3958
doufan3958 我想我喜欢你要去的地方。 另外,您可以将“$ _GET”参数发送到download.php脚本,告诉它要下载什么。 约翰吴,开始这个先生。
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐