【发布时间】:2011-07-18 18:40:18
【问题描述】:
我正在使用 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 处理程序的范围。然而,我重新编写代码,我似乎遇到了这些障碍之一,我正在努力想出一种优雅的方式来处理它。
有什么建议吗?
【问题讨论】:
-
其实“const”肯定在范围内,但范围不是问题。
-
顺便说一句,这个问题做得很好。欢迎使用 Stackoverflow!
-
谢谢。是时候让我摆脱潜伏了。
标签: javascript html multipartform-data fileapi