将js对象转换为csv不起作用,并且不显示错误

时间:2017-04-11 12:36:17

标签: javascript jquery csv knockout.js

我正在尝试使用jquery foreach将js对象转换为csv,这是对象的样子enter image description here

在对象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){                 
            });
        }

没有错误所以不确定要调试什么:(需要帮助。

1 个答案:

答案 0 :(得分:1)

window.open(csvContent)不执行任何操作,因为它不是URL。 您需要创建Blob才能下载内容。

您从jsoncsv的转换也是错误的。 doc.join(",")仅在docArray时才有效,但您的图片显示为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();