2017-10-30 8 views
-1

WebアプリケーションでFileReaderを使用してユーザーが選択したローカルファイルを読み込み、readAsText()を実行するとreadyStateが '2'に変更されます。ここに私が持っているコードは次のとおりです:Chromeでファイルを読み込むときにFileReader readyStateが1でスタックされています

 var fr = new FileReader(); // readyState is 0 
     var filetoload = $("#foo")[0].files[0]; 
     fr.readAsText(filetoload); // readyState should be 2!! 
     var xml = fr.result; 
     localStorage.setItem('foo', xml); 

Firefoxで、これはすべて正常に動作し、XMLはlocalStorageに書き込まれます。このChromeをコンソールの休止状態(#foo入力に指定されたファイルがあると仮定)で実行すると、うまく動作します。しかし、もし私が上記の3行目の後に私の.jspファイルのreadyタグ= 1(!)のスクリプトタグからこれを通常通り実行すると、そして、私が3行目にブレークポイントを置き、コンソールからreadAsText()を試そうとすると、readyState = 1も設定されます。

実行中にChromeでファイルを完全に読み取るには何が必要ですか?私は間違って何をしていますか?コンソールで静止状態のときにのみFirefoxとChromeで動作するという事実は、Chromeがこれを許可する必要があることがさらにあると信じています。どんな洞察もありがとう、ありがとう。

+0

なぜ否定的な投票ですか? – Atom999

答えて

0

this postから回答が見つかりました。ファイルの読み込みは非同期的に行われるので、それに応じて処理する必要があったと思います。以下は私のために働いたものです。 (jsonCall()は、基本的に$ .ajaxという名前の内部関数です)これは将来誰かに役立つことを願っています。

$(document).ready(function(){ 
     $('#foo').on('click', function(e){ 
      readFile($("[name='filelocation']")[0].files[0], function(e) { 
       // use e.target.result in callback... 
       var data = { "xml" : e.target.result }; 
       jsonCall("myservlet", data, function() { 
        window.open(url, "_blank", "height=800,width=1200"); 
       }) 
      }); 
     }); 
    }); 

    function readFile(file, onLoadCallback) 
     { 
     var fr = new FileReader(); 
     fr.onload = onLoadCallback; 
     fr.readAsText(file); 
     } 
関連する問題