HTML5 ファイル API を使用して、XHR から Web サービスに送信するためのマルチパート フォーム データを組み立てています。ファイル API の実装に便利な getAsBinary() メソッドが含まれている FF ですべての作業を行っています。これはかなり甘い取引でした。それは基本的に行きました:
var const; // constructor
const += headers;
const += field_data;
for(var i = 0; i < files.length; i++)
{
const += files[i].getAsBinary();
}
sendData(const);
魅力のように働きました。
ただし、Chrome で動作させるには、FileReader オブジェクトを作成する必要があります。このオブジェクトの処理は少し異なります。私は本質的に行かなければなりません:
var const; // constructor
const += headers;
const += field_data;
var reader = new FileReader();
for(var i = 0; i < files.length; i++)
{
reader.onload = (function(file)
{
const += file.target.result; // const is not in scope in this anonymous function!
}
reader.readAsBinaryString(files[i]);
}
sendData(const);
主な理由は 2 つあります。まず、読み取りは非同期で行われるため、sendData() 関数に到達するまでに、ファイル データは const 変数に書き込まれません。第 2 に、const 変数は、reader.onload ハンドラー内の範囲外です。ただし、コードを再調整すると、これらの障害の1つに遭遇したようで、それを適切に処理する方法を考え出すのに苦労しています。
助言がありますか?