2015-12-30 66 views
0

我試圖快速生成一個CSV文件並允許用戶在API被擊中時下載它。下面是我想象中的使用標題下載CSV在PHP中不起作用

User hit a button -> 
jquery do $.get to api -> 
api endpoint prepares data -> 
api endpoint pass in data to another function to generate csv 

這裏,用戶交互是到目前爲止我的代碼

public function test(){ 
     header("Content-Type: text/csv"); 
     header("Content-Disposition: attachment; filename=file.csv"); 
     // Disable caching 
     header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1 
     header("Pragma: no-cache"); // HTTP 1.0 
     header("Expires: 0"); // Proxies; 

     $f = fopen("php://output", "w"); 
     $test_data = array(
      array(
       'something1' => '2' 
      ), 
      array(
       'somethign2' => '3' 
      ), 
     ); 
     foreach($test_data as $line){ 
      fputcsv($f, $line, ','); 
     } 
     fclose($f); 

    } 

我發現,而不是下載的CSV,瀏覽器只是呈現的結果

2 
3 
的內容

當我在使用Chrome的網絡中查看它。

我試圖改變內容類型強制下載,但仍然有同樣的結果

任何幫助,將不勝感激。

謝謝

+0

如果將'file.csv'引入引號會發生什麼?像這樣:'header(「Content-Disposition:attachment; filename = \」file.csv \「」);' –

回答

2

你不能用ajax下載東西。這是一項安全功能(JavaScript無法以任何方式與用戶的文件系統進行交互)。沒有插件,沒有黑客,它不能完成。

而不是試圖用JavaScript下載文件,你必須指向瀏覽器本身的文件。你可以做一個表格,如果您需要將數據傳遞到後面...

$("#button").click(function(){ 
    $("<form id='hiddenform' action='myAPIEndpoint'><input type='hidden' name='parameter1' value='somevalue' /></form>") 
     .apendTo("body"); 
    $("#hiddenform").submit(). remove(); 
}); 

或者,如果你不需要任何的PS數據到後端,您可以使用指向一個普通的鏈接下載頁面。