JS 实现CSV下载的方式
1.csv前端处理并下载
前端处理并下载CSV,一般是通过AJAX请求,取回服务器端的数据(多为json形式的字符串)后,利用js将json转为csv格式后进行下载。
- 优点
使用Ajax, 可以监控response相应, 便于各种异常处理。 - 缺点
jquery的ajax对后台传回的csv数据以UTF-8进行编码,导致对日开发中例如用Window-31J对csv进行编码后,回到前台的数据会产生乱码。
※后台不用UTF-8编码是因为客户需要下载的csv可以用日文版excel直接打开
// 声明的json对象
// 这里为了便于说明,直接声明了json对象,
// 链接的sample中有直接从ajax取json的例子,需要的可以去参考
var studentList = [
{
"id":"1",
"name":"xiaoming",
"age":"23"
},...
];
// 将json转换为csv格式
// 具体的转换方式在链接的custom.js中有具体实现,可以参照
// 或者大家可以去网上自行搜索转换lib
// 例如:https://github.com/boychina/json2csv
var csv = jsonToCsv(studentList);
// csv下载实现(chrome,fireFox)
function csvDownload(content, filename) {
// 创建一个a元素
var hrefLink = document.createElement('a');
// 赋予download属性(html5新增属性)
hrefLink.download = filename;
hrefLink.style.display = 'none';
// 利用Blob将字符串转为二进制,参数必须为数组
var blob = new Blob([csv]);
// 将下载链接指向创建的blob url。
// url例:blob:null/f046752e-238e-4bf7-ba13-647a2cae8e84
hrefLink.href = URL.createObjectURL(blob);
// 这里的appendChild和removeChild是为了兼容FireFox而添加的
document.body.appendChild(hrefLink);
hrefLink.click();
document.body.removeChild(hrefLink);
}
// msSaveOrOpenBlob为IE独有的属性,支持下载
if (navigator.msSaveOrOpenBlob) {
// IE调用msSaveorOpenBlob方法下载文件
button.addEventListener('click', function() {
// 文件名
var fileName = "csv_download_";
var date = new Date(