Javascript 将js对象转换为csv不起作用,不会显示任何错误

Javascript 将js对象转换为csv不起作用,不会显示任何错误,javascript,jquery,csv,knockout.js,Javascript,Jquery,Csv,Knockout.js,我正在尝试使用jqueryforeach将js对象转换为csv,下面是该对象的外观 在对象0中,它有电子邮件:farhana@farhana.com全名:法哈纳 我遵循了stackover flow中的一个示例,我认为它可以工作,但是CSV文件没有下载,也没有显示任何消息 这是密码 self.downloadCSV = function(){ $.ajax({ type: 'GET', url: BASEUR

我正在尝试使用jqueryforeach将js对象转换为csv,下面是该对象的外观

在对象0中,它有电子邮件:farhana@farhana.com全名:法哈纳

我遵循了stackover flow中的一个示例,我认为它可以工作,但是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){                 
            });
        }
没有错误,因此不确定要调试什么:需要帮助。

window.opencsvContent没有任何功能,因为它不是URL。 您需要创建一个Blob来下载内容

另外,从json到csv的转换也是错误的。doc.join,仅当doc是一个数组,但您的图片显示它是一个对象时才起作用,因此您需要以不同的方式进行操作

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' }]; //将js对象数组转换为csv字符串 //如果您的文档是一个对象 var csv=docs.reducestr,doc=>str+='+Object.valuesdoc.join','+'\r\n','+Object.keysdocs[0].join','+'\r\n'; //如果您的文档是数组 //var csv=docs.reducestr,doc=>str+='+doc.join','+'\r\n'; //下载csv字符串作为blob var blob=new blob[csv],{'type':'application\/octet stream'}; var a=document.createElement'a'; a、 href=window.URL.createObjectURLblob; a、 下载='docs.csv'; a、 点击;
a、 移除;你的console.logdocs是什么;show?@JasonSpake第一张图片为答案,我目前无法在=>中的代码中使用箭头符号。有没有办法改变这一点,以便我可以直接使用js代码?好的,我已经修复了,但我正在使用您的代码,结果未定义,但不确定为什么。我替换了类似于var csv=docs.reduce函数str的代码,doc{str+='+Object.valuesdoc.join','+'\r\n','+Object.keysdocs[0].join','+'\r\n'};