我正在尝试使用jquery foreach将js对象转换为csv,这是对象的样子
在对象0中,它有email : "farhana@farhana.com"
和fullname : "farhana"
我在stackover流程中跟踪了一个示例,我认为它有效,但CSV文件没有下载,或者向我显示任何消息。
这是代码
self.downloadCSV = function(){
$.ajax({
type: 'GET',
url: BASEURL + 'index.php/admin/getcsv/' + auth ,
contentType: 'application/json; charset=utf-8',
})
.done(function(docs) {
if(docs == null){
alert('file not found for csv');
}else{
// Here is where the foreach and storing to csv starts.
console.log(docs);
var csvContent = "data:text/csv;charset=utf-8,";
$.each(docs, function (index, doc) {
var dataString = doc.join(",");
csvContent += index < doc.length ? dataString+ "\n" : dataString;
});
var encodedUri = encodeURI(csvContent);
window.open(csvContent)
}
})
.fail(function(xhr, status, error) {
alert(error);
})
.always(function(data){
});
}
没有错误所以不确定要调试什么:(需要帮助。
答案 0 :(得分:1)
window.open(csvContent)
不执行任何操作,因为它不是URL。
您需要创建Blob
才能下载内容。
您从json
到csv
的转换也是错误的。 doc.join(",")
仅在doc
为Array
时才有效,但您的图片显示为Object
,因此您需要采取不同的方式
var docs = [{ name: 'test', id: 22, emal: 'test@test.com' }, { name: 'test2, sample', id: 2122, emal: 'test2@test.com' }, { name: 'test3', id: 2223.23, emal: 'test3@test.com' }];
// convert js object array to csv string
// if your "doc" is an Object
var csv = docs.reduce((str, doc) => str += '"' + Object.values(doc).join('","') + '"\r\n', '"' + Object.keys(docs[0]).join('","') + '"\r\n');
// if your "doc" is an Array
// var csv = docs.reduce((str, doc) => str += '"' + doc.join('","') + '"\r\n', '');
// download csv string as blob
var blob = new Blob([csv], { 'type': 'application\/octet-stream' });
var a = document.createElement('a');
a.href = window.URL.createObjectURL(blob);
a.download = 'docs.csv';
a.click();
a.remove();