ユーザーが単一のテキスト ファイルを選択するファイル入力要素を使用しています。
<input type="file" id="myfile">
選択したファイルのコンテンツをロードする FileReader オブジェクトの非同期イベントに関連付けられた jQuery Promise を作成したいと思います。さまざまなコンテキストでこのようなコードを試しましたが、 then() コールバックに渡されたコンテンツ変数を取得できないため、ある種のタイミングの問題があるようです:
var promise = $.Deferred(function(dfd) {
var file = $("#myfile")[0].files[0];
var reader = new FileReader();
reader.onload = function(event){
var contents = event.target.result;
dfd.resolve(contents);
};
reader.readAsText(file);
}).promise();
// other code and promises here
$.when(promise).then(function(contents){
console.log(contents);
});
実際には 2 つのイベントが関係しています。最初のイベントは、ユーザーが [参照] ボタンをクリックして特定のファイルを選択したときに発生します。2 番目のイベントは、FileReader が選択されたファイルの内容とともに読み込まれるときです。これを正しくパッケージ化する方法を誰かが知っている場合は、解決時に選択したファイルの内容が保持されることを約束します。あなたの洞察に感謝します。前もって感謝します。