2016-04-12 11 views
0

Ich habe Code wie folgt, wenn ich die Datei loginContent gibt gibt korrekte Ausgabe, aber wenn ich versuche, es als Rückgabe zu bekommen, gibt es einen Fehler.Erhalten undefined Rückruf

Ich möchte den Inhalt der CSV-Datei in anderen Funktionen verwenden.Während der Code sauber zu halten.

;(function(){ 

    function readTextFile(file) 
    { 
var rawFile = new XMLHttpRequest(); 
rawFile.open("GET", file, true); 
var fileContent; 
rawFile.onreadystatechange = function() 
{ 
    if(rawFile.readyState === 4) 
    { 
     if(rawFile.status === 200 || rawFile.status == 0) 
     { 
      var allText = rawFile.responseText; 
      fileContent =csvJSON(allText); 
      return fileContent; 
     } 
    } 
} 
rawFile.send(null); 
    } 


    function csvJSON(csv){ 
    var lines=csv.split("\n"); 

    var result = []; 

    var headers=lines[0].split(","); 

    for(var i=1;i<lines.length;i++){ 

    var obj = {}; 
var currentline=lines[i].split(","); 

for(var j=0;j<headers.length;j++){ 
    obj[headers[j]] = currentline[j]; 
} 

result.push(obj); 

    } 

    return result; //JavaScript object 
    //return JSON.stringify(result); //JSON 
    } 

    var mainContent = readTextFile("main.csv"); 


    })(); 

Antwort

0

Sie sollten etwas über asynchrone Arbeit wissen. Wenn Sie den Handler auf readystatechange setzen und dieses Ereignis von XMLHttpRequest abonnieren, wird Ihre Funktion aufgerufen, wenn dieses Ereignis ausgelöst wird. Daher kann diese Funktion Ihnen nichts zurückgeben. Außer wenn Sie eine andere Funktion mit dem Namen callback und im Handler angeben, rufen Sie sie alle auf.

Blick auf diese:

function readTextFile(file, callback) { 
    var rawFile = new XMLHttpRequest(); 
    rawFile.open("GET", file, true); 
    var fileContent; 
    rawFile.onreadystatechange = function() { 
     if(rawFile.readyState === 4) { 
      if(rawFile.status === 200 || rawFile.status == 0) { 
       var allText = rawFile.responseText; 
       fileContent =csvJSON(allText); 
       callback(fileContent); 
      } 
     } 
    } 

Und wenn Sie möchten, Anfrage:

readTextFile('main.csv', function(data) { 
    console.log(data); 
} 

Dies ist, wie asynchrone Rechenarbeit.

Verwandte Themen