2013-06-04 90 views
0

下面的代碼是我目前的。我想在onload外部提醒(reader.result),但它總是返回null。 readAsText()被稱爲並且完成後不應該保留它的結果reader.result?JavaScript-get reader.result onload

更具體地說,我的最終目標是讀取文件中的文本,然後將它保存在一個變量中供將來使用。我剛剛使用警報作爲調試工具(可能很糟糕,我知道)。

<input type="file" id="fileinput" /> 
<script type = "text/javascript" id="00"> 
    var contents = []; 
    function readAFile(evt) 
    { 
     var reader = new FileReader(); 
     var test 
     var file = evt.target.files[0]; 

     if (file) 
     { 

      reader.onload = function (element) { 
       alert("in onload"); 
       this.result = element.target.result; 
       alert(reader.result); 
      }; 
      reader.onerror = function (element) { 
       alert("reader.onerror called - could not load"); 
      }; 

      reader.readAsText(file); 
      alert(reader.result); 

     } 
     else 
     { 
      alert("if(file) returned false - could not load"); 
     } 

    } 

    document.getElementById('fileinput').addEventListener('change', readAFile, false); 
+0

的FileReader是異步的。所以你在讀取任何內容之前調用alert()。 – Barmar

+0

@Barmar這是我第一次想到的,但是alert(reader.result)返回null在alert(reader.result)內部onload(它返回實際結果)後彈出。據我所知,警報是同步的,因此證實閱讀已經及時完成。 – user2453500

+0

我在Chrome中首先收到空警報。 http://jsfiddle.net/barmar/PkGH4/1/ – Barmar

回答

0
<!DOCTYPE html> 
<html> 

<input type="file" id="files" name="file" /> 
<div id="container" style="height: 500px; min-width: 500px"></div> 

<script> 
function handleFileSelect(evt) 
{ 
    var files = evt.target.files; // FileList object 

    // Loop through the FileList and render image files as thumbnails. 
    for (var i = 0, f; f = files[i]; i++) 
    { 

     var reader = new FileReader(); 
     reader.onload = (function(reader) 
     { 
      return function() 
      { 
       var contents = reader.result; 
       var lines = contents.split('\n'); 
       ////// 
       document.getElementById('container').innerHTML=contents; 
      } 
     })(reader); 

     reader.readAsText(f); 
    } 
} 
    document.getElementById('files').addEventListener('change', handleFileSelect, false); 
</script> 
</html>