2016-11-14 83 views
1

我想下載一個使用jQuery按鈕onclick CSV文件。我有一個<a>標記,其ID爲export,我希望它指向下載鏈接,我可以下載我剛剛創建的CSV文件。jQuery下載一個csv文件與鏈接onclick

// Using this jquery to send my sql query to server-side-CSV 
$('#export').on('click', function() { 
    var sqlsend = dataTable.ajax.json().sql; 
    $.post('server-side-CSV.php', 'val=' + sqlsend, function(request){ 
    //code should go here 
    }); 
}); 

這是我的PHP代碼在那裏我創建一個CSV文件

// This is my server-side-CSV file. It's creating a csv file to  downloaded 
<?php 
require("connection.php"); 
$sql = $_POST['val']; 
. 
.more code 
. 

// loop over the rows, outputting them 
while ($row = mysqli_fetch_assoc($rows)) fputcsv($output, $row); 
fclose($output); 
exit; 
?> 

我能做些什麼來下載CSV文件?

編輯: 最後找出答案,

$('#export').on('click', function() { 
    var sqlsend = dataTable.ajax.json().sql; 
    window.location.href="server-side-CSV.php?val="+sqlsend; 
}); 
+0

要麼使用表單,要麼打開彈出窗口,或者使用[數據URI](http://stackoverflow.com/questions/3665115/create-a-file-in-memory-for-user-to-下載不通過服務器) – nicovank

+0

如果我使用的URI,那麼我將如何能夠發送'sqlsend'變量到我的PHP文件?我很抱歉,對這一切都很新穎。 –

+0

你的'request'文件是否被下載? –

回答

0

代替$.post,發送瀏覽器下載位置:

document.location.href = 'server-side-CSV.php?val='+sqlsend; 

您需要在循環前添加標題。

header("Content-type: text/csv"); 
header("Content-Disposition: attachment; filename=file.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

請參閱this answer

+0

是的,我已經擁有了所有這些標題。 Stackoverflow沒有讓我添加所有的代碼。 –

+0

我建議檢查你的server-side-CSV.php文件是否適用於一些硬編碼的SQL。直接從瀏覽器調用它。 – olegsv

+0

是的,當我通過我自己的SQL查詢時它工作得很好。當我通過sql查詢,函數(請求)時,這個'請求'變量包含所有的數據,但沒有顯示任何下載彈出窗口。 –