2013-07-18 36 views
0

我需要發送數據到php文件並下載它。發送數據到php並下載文件

當我直接調用它時,我的腳本工作正常,但是當我使用AJAX發送數據時,它根本沒有下載。

我的問題是:如何發送數據到php文件和自動下載文件,但當然留在同一頁?當直接調用所使用的代碼的

部分...

PHP文件

header('Content-Description: File Transfer'); 
header("Content-type: application/ms-word"); 
header("Content-Disposition: attachment;Filename=ponuda.doc"); 

$productsArr = json_decode($_POST['object']); 
$html = "<tr>"; 
foreach($productsArr as $product) 
{ 
    //something 
} 
.... 
echo $html; 

AJAX調用:

$.ajax({ 
      type: "POST", 
      url: "test_download.php", 
      data: { object:productsJSON }, 
      cache: false 
     }); 
+0

您必須重定向到下載頁面,如果頭被正確設置和瀏覽器識別它的下載一個文件,而不是顯示頁面,那麼這將正常工作。這就像點擊一個.exe鏈接,你的瀏覽器不會白頁 - 它只是統計下載。 Ajax不能用於製作文件下載,這是不可能的。 – skrilled

+0

有一些例子嗎? –

+1

你可以通過這個鏈接http://stackoverflow.com/questions/11477052/php-file-download-using-hidden-iframe-without-saving?rq=1 – Kasma

回答

0

我做到以下幾點:

  1. 附上exchanger.js javascript文件在你的腦袋節
  2. 初始化頁面加載的交換對象:theBuffer = new exchanger('dwnld');
  3. 創建一個JavaScript函數,你會打電話每當你想啓動一個文件下載 :

    function downloadFile(){ 
         // you can add parameters to the function as needed to pass in dynamic data sent to the back end download handler 
         data = "http://your_backend_file_download_handler.php?param1=val1&param2=val2&etc=whatever"; // send whatever data you need to the php program via query string parameters 
         theBuffer.sendData(data); // initiate the file download 
    } 
    

    注意:處理請求的php後端文件下載程序可以完成它需要處理的參數,以便將它們放在一起/檢索正確的數據/文件以供下載。經過多少修補之後this combination是一貫爲我工作的東西

  4. 在你的身體部分包含這一點點的html。我通常把它剛剛結束標記之前:

    <iframe name="dwnld" id="dwnld" style="width:0;height:0;border:0"> 
    </iframe> 
    
    Note: the id value assigned to the iframe is the same value given in step 2 when initializing. 
    

結果是用戶永遠不會離開當前頁面下載任意數量的文件,因爲實際的下載是一個單獨的頁面處理(又名iframe)。多年來,我在所有項目中都沒有使用過它。