我正在使用 HTML5 文件 API 来组装多部分表单数据,以通过 XHR 提交到 Web 服务。我在 FF 中完成了所有工作,它在文件 API 的实现中包含了一个非常方便的 getAsBinary() 方法。这是一笔非常甜蜜的交易。它基本上去了:
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);
这不起作用,主要有两个原因。首先,读取是异步发生的,所以当它到达 sendData() 函数时,文件数据并没有写入 const 变量。其次, const 变量超出了 reader.onload 处理程序的范围。然而,我重新编写代码,我似乎遇到了这些障碍之一,我正在努力想出一种优雅的方式来处理它。
有什么建议么?