在现代浏览器中,您可以通过使用文件内容(在您的情况下由 Ajax 接收)创建 Blob、为其创建 URL 并使用download
属性:
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);
JSFiddle https://jsfiddle.net/zzapxtem/2/
如果您的 Ajax 端点 URL 具有正确的标头(或者即使它不是,只要您使用download
属性),您可以放弃 Blob 和 Ajax,只需将 URL 添加到具有下载属性的链接即可。改编@pritesh的代码,
const saveData = (function () {
const a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (url, fileName) {
a.href = url;
a.download = fileName;
a.click();
};
}());
const url = 'http://www.sample-videos.com/csv/Sample-Spreadsheet-10-rows.csv', // Replace with your own URL: window.location + "/downloadUserAction?draw=3&search%5Bvalue%5D=NLP_SEARCH&order%5B0%5D%5Bcolumn%5D=6&order%5B0%5D%5Bdir%5D=desc"
fileName = "my-csv.csv";
saveData(url, fileName);
JSFiddle https://jsfiddle.net/mb5qdaua/2/