我正在从JSON生成CSV。一切正常,直到需要下载浏览器文件中缓存的时间为止。我测试过Chrome,Safari,IE,Edge和Firefox。在所有浏览器中,只有Firefox不下载该文件。我使用以下代码:
$(document).ready(function () {
function JSONToCSV(JSONData, JSONHeader, PageName) {
var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
var arrHeader = typeof JSONHeader != 'object' ? JSON.parse(JSONHeader) : JSONHeader;
var CSV = '';
// ADD Headers
var row = "";
for (var i = 0; i < arrHeader.length; i++) {
row += '"' + arrHeader[i].title + '",';
}
row = row.slice(0, -1);
CSV += row + '\r\n';
// ADD Data
for (var i = 0; i < arrData.length; i++) {
var row = "";
for (var index in arrData[i]) {
if (index == "action_date") {
row += '"' + moment(arrData[i][index]).format("DD/MM/YYYY HH:mm:ss") + '",';
}
else {
row += '"' + arrData[i][index] + '",';
}
}
row = row.slice(0, -1);
CSV += row + '\r\n';
}
var FileName = PageName + "." + moment().format('DDMMYYYY') + ".csv";
var blob = new Blob([CSV], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) {
navigator.msSaveBlob(blob, FileName);
}
else {
var link = document.createElement("a");
if (link.download !== undefined) {
var url = window.URL.createObjectURL(blob);
document.body.appendChild(link);
link.setAttribute('href', url);
link.setAttribute('download', FileName);
link.style.visibility = 'hidden';
console.log(link);
link.click();
setTimeout(function() {
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
}, 100);
}
}
}
$("#ExportToExcel").on('click', function (event) {
var filename = (window.location.pathname).substr(1);
filename = filename.substring(0, filename.indexOf('/'));
var data = $('#jsGrid').jsGrid('option', 'data');
var header = $('#jsGrid').jsGrid('option', 'fields');
JSONToCSV(data, header, filename);
});
});
我做错了什么。在所有页面上都有一个信息要么添加延迟,要么添加元素到我正在做的DOM,但仍然没有快乐。
我找到了在Firefox中运行的小提琴http://jsfiddle.net/8wos7cf8/,因此我将代码复制到我的应用程序中,完全覆盖了我写的内容,但仍然无效。我在OSX和Windows上测试了Firefox,两者都没有下载缓存文件。我需要做错事,但我看不出它是什么。