4

アップロード ファイルの内容を Javascript 変数に読み込みたいと考えています。

プログラムは file.getAsBinary を使用して動作していましたが、これは非推奨になり、FileReader() を使用するように更新する必要があります。

フォームにはファイルアップロードの選択があり、onsubmit は javascript で関数 uploadDB() を実行します。

変数 dbname は、アップロード選択のファイル名と同様に正常に渡されます。アラートまたは console.log で確認できます。

ファイル テキストを受け取る最終的な bfile 変数は未定義です。readAsText と ReadAsBinary の両方を試しましたが、bfile は定義されていません。var 宣言は関数 uploadDB() にあり、内部関数に対してグローバルである必要があります。スコープが何らかの問題である場合、bfile 変数で結果を取得するにはどうすればよいですか。

おそらく単純ですが、動作させることができません。誰かが何か提案してください。html セクションは次のとおりです。

<form onsubmit="uploadDB()"; method="post">
Database <input type=text name="dbName" id="dbName" size=20>
<input type=file id="metaDescFile" size=50 >
<input type=submit value="Submit">
</form>

js スクリプトは (余分なものを編集して) に似ています。

<script language="javascript" type="text/javascript">
<!--
    var uploadDB = function() {
        var input = document.getElementById('metaDescFile');
        var fname = document.getElementById('metaDescFile').value;
        var file=input.files[0];
        var bfile;

        reader = new FileReader();

        reader.onload = function(e) {  bfile = e.target.result }
        reader.readAsText(file);
        alert(bfile);   // this shows bfile as undefined


        // other stuff
    }
4

2 に答える 2

6

コールバックで bfile が設定されるとonload、コールバックが起動される前にコードが評価されるため、そのコールバックの外部にアクセスすることはできません。

これを試して:

reader = new FileReader();
reader.onload = function(e) {  
  bfile = e.target.result 
  alert(bfile);   // this shows bfile
}
reader.readAsText(file);
于 2013-01-09T00:02:15.737 に答える