2017-04-11 48 views
0

我想JS對象轉換爲CSV,使用jQuery的foreach,這裏是對象是什麼樣子enter image description here轉換JS對象爲CSV不工作,沒有錯誤顯示

在對象0它email : "[email protected]"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

什麼是你 「的console.log(文檔);」 做節目? –

+0

@JasonSpake第一張圖片 – FaF

回答

1

window.open(csvContent)不這樣做,因爲它不是一個URL任何東西。 你需要創建一個Blob下載內容。

也轉換從jsoncsv是錯誤的。doc.join(",")只能當docArray但你的照片說,它的一個Object,所以你需要以不同的方式

var docs = [{ name: 'test', id: 22, emal: '[email protected]' }, { name: 'test2, sample', id: 2122, emal: '[email protected]' }, { name: 'test3', id: 2223.23, emal: '[email protected]' }]; 
 

 
// 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();

+0

感謝jag的回答,我目前無法在'=>中使用帶有代碼的箭頭符號,有沒有辦法改變這種方式,以便我可以直接使用js代碼? – FaF

+0

好吧我解決了這個問題,但是我使用你的代碼並得到未定義的結果,不知道爲什麼。 – FaF

+0

我替換了這樣的代碼'var csv = docs.reduce(function(str,doc){str + ='''+ Object.values(doc).join('「,'')+'」\ r \ n','''+ Object.keys(docs [0])。join('「,'')+'」\ r \ n'});' – FaF

相關問題