2015-03-13 82 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和發佈表單,然後瀏覽器會尊重你的頭指示下載。

很抱歉在這個時候沒有給你一個例子,但希望能有解決您的工作在正確的方向,從而避免浪費更多的時間進行測試。