2017-04-11 5 views
0

Ich versuche js Objekt zu csv, mit Jquery foreach, hier ist das, was das Objekt sieht aus wie enter image description hereUmwandlung js Objekt csv nicht funktioniert und kein Fehler angezeigt

In Objekt 0 hat email : "[email protected]" und fullname : "farhana"

zu konvertieren

Ich folgte einem Beispiel von Stackover-Flow und ich dachte, es funktioniert, aber die CSV-Datei wird nicht heruntergeladen, oder zeigen Sie mir keine Nachricht. Hier

ist der Code

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

Kein Fehler so nicht sicher, was zu debuggen :(Hilfe nötig.

+0

Was macht Ihr "console.log (docs)," zu zeigen? –

+0

@JasonSpake Das erste Bild – FaF

Antwort

1

window.open(csvContent) nichts tun, da es nicht eine URL. Sie benötigen ein erstellen Blob zum herunterladen von Inhalten.

auch Ihre Umwandlung von json zu csv falsch ist. doc.join(",") funktioniert nur, wenn doc eine Array aber Ihr Bild sagt sein ein Object so müssen Sie es anders

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

Danke Jag für die Antwort, kann ich derzeit nicht das Pfeilzeichen mit dem Code in '=>' gibt es eine Möglichkeit, das zu ändern, so dass ich den Js-Code direkt verwenden kann? – FaF

+0

okay, das habe ich behoben, aber ich benutze deinen Code und bekomme undefiniert als Ergebnis, nicht sicher warum. – FaF

+0

Ich ersetzte den Code wie folgt: var csv = docs.reduce (Funktion (str, doc)) {str + = '"' + Objekt.Values ​​(doc) .join ('", "') + '" \ r \ n ',' "'+ Objekt.Tasten (docs [0]). join ('", "') +'" \ r \ n '}); ' – FaF

Verwandte Themen