2016-04-12 11 views
0

Dosyayı kaydetme konsoluna giriş yaptığımda böyle bir kodum var Doğru çıktı veriyor ancak bir getiri olarak almaya çalıştığımda hata veriyor.Tanımlanmamış geri arama alın

Diğer işlevlerde csv dosyasının içeriğini kullanmak istiyorum.

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


    })(); 

cevap

0

Asenkron çalışma hakkında biraz bilgi sahibi olmalısınız. İşleyiciyi readystatechange olarak ayarladığınızda, yalnızca bu olaya XMLHttpRequest'ten abone oluyorsunuz, bu olay yangın olduğunda işleviniz çağrılacaktır. Bu nedenle, bu işlev size bir şey geri getiremez. Hepsini kapa Belirtiler callback adlı başka bir işlev belirtin ve işleyiciden sonra tüm çağrıyı çağırırsanız.

şuna bak:

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

Ve isteğini istediğinizde:

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

Bu nasıl asenkron hesaplama işidir.