我有一個名爲'/ downloadUserAction'的端點,用於收集數據並下載csv文件。我遇到的挑戰是,當使用點擊功能上的按鈕調用端點時,文件不會被下載,但只有當我直接在瀏覽器中訪問端點時纔會下載文件。下載csv文件作爲對AJAX請求的響應
經研究,我發現了一些發現,結論是你不能使用AJAX下載文件。這是有道理的,因爲當我點擊我的按鈕時,我看到端點被擊中,文件內容在網絡選項卡中傳遞,但沒有文件被下載到客戶端。
這就是我只是在JavaScript頁面上使用數據表按鈕插件功能在我的頁面上調用我的端點。
$(document).ready(function() {
var table = $("#userActivity").on('init.dt', function() {
}).DataTable({
dom: 'Blfrtip',
buttons: [
{
extend: 'csvHtml5',
text: 'NLP Search Download',
action: function (e, dt, node, config) {
$.ajax({
url : window.location + "/downloadUserAction?draw=3&search%5Bvalue%5D=NLP_SEARCH&order%5B0%5D%5Bcolumn%5D=6&order%5B0%5D%5Bdir%5D=desc"
});
}
}
],
是否有另一種方法調用我的端點,將強制客戶端頁面下載?
side-note:我的數據表正在使用服務器端處理,否則我只會使用datatables csv exporting按鈕。
const saveData = (function() {
const a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, fileName) {
const blob = new Blob([data], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
const data = 'a,b,c\n5,6,7',
fileName = "my-csv.csv";
saveData(data, fileName);