2012-12-14 130 views
1

可能重複:
Downloading Via JQuery AJAX Post not workingPHP AJAX jQuery的 - 文件下載問題

filedownload.php低於snippent。

$file = 'cut.png'; 
header("Content-Type: image/png"); 
header('Content-Disposition: attachment; filename="'.$file.'"'); 
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download"); 
readfile($file); 
exit(); 

AJAX調用

jQuery.post('filedownload.php',{    
    'file' : result // not used for the time being      
}); 

我做一個AJAX調用filedownload.php文件。它不允許用戶下載文件。但是如果我直接運行php,它允許用戶下載文件。可能是什麼問題 ?

我想使用核心函數而不是使用jQuery插件。如果這是不可能的,一個插件會好起來的。

鑑於我使用ajax,因爲頁面無法刷新。

+0

校驗碼了這一點:http://stackoverflow.com/questions/676348/allow - 用戶對下載文件使用的Ajax –

回答

3

的問題

讓我們生產力的web應用程序的例子,如電子表格 編輯器,其中有打開,保存,進口和出口的能力。 打開和保存選項將涉及從 數據庫加載電子表格,而導入和導出用戶計算機上的本地文件。要實現導出行爲,您可以決定 用戶應該首先保存其電子表格,允許您將數據從後端導出到文件。但我們假設 ,而不是您希望允許用戶導出其數據而不保存, 也許可以讓他們選擇在本地工作,而不需要在服務器上存儲數據 。爲了做到這一點,你需要發送 當前的電子表格數據到後端,並接收文件到 下載。不幸的是,這不能使用Ajax來處理,因爲 Ajax只能以文本形式接收響應。在要保存的數據相當長的情況下,這會產生相當大的問題。

的解決方法

爲了使的要求,你需要使用GET或POST HTTP請求進行定期(不阿賈克斯)。如果數據相當短,您可能會通過GET請求(可能只需將 Window.location設置爲您的導出網址),但由於瀏覽器對GET請求長度的限制不同,最有可能需要POST 。 以下插件允許您發出請求,以類似於jQuery本機Ajax函數的語法返回文件 。

jQuery的哪一個能解決問題

jQuery.download = function(url, data, method){ 
    //url and data options required 
    if(url && data){ 
     //data can be string of parameters or array/object 
     data = typeof data == 'string' ? data : jQuery.param(data); 
     //split params into form inputs 
     var inputs = ''; 
     jQuery.each(data.split('&'), function(){ 
      var pair = this.split('='); 
      inputs+='<input type="hidden" name="'+ pair[0] +'" value="'+ pair[1] +'" />'; 
     }); 
     //send request 
     jQuery('<form action="'+ url +'" method="'+ (method||'post') +'">'+inputs+'</form>') 
     .appendTo('body').submit().remove(); 
    }; 
}; 

如何調用

$.download('filedownload.php','filename='+filename); 

Read more