当多个文件处于活动状态时,Filereader 会被覆盖
Filereader gets overwritten when multiple files are active
我正在尝试同时解析 2 个或更多 xml 个文件。意味着我可以选择例如 5 个 .xml 文件,然后它应该通过 jQuery 插件进行解析,然后写在页面上。
现在我的问题是:循环的第二次、第三次等迭代触发得太早,因此第一个文件得到 "lost".
我的尝试:
var input = $("#xmlInput");
input.change(function () {
var inputfiles = input[0].files;
for (var i = 0; i < inputfiles.length; i++) {
var reader = new FileReader();
reader.readAsText(inputfiles[i]);
reader.onloadend = function () {
var data = $.xml2json(reader.result);
console.log(data);
//write(data);
}
}
});
这只是一个猜测,但它有助于将 FileReader 分配给不同的变量吗?
var temp = {};
var input = $("#xmlInput");
input.change(function () {
var inputfiles = input[0].files;
for (var i = 0; i < inputfiles.length; i++) {
temp["reader"+i] = new FileReader();
temp["reader"+i].readAsText(inputfiles[i]);
temp["reader"+i].onloadend = function () {
var data = $.xml2json(temp["reader"+i].result);
console.log(data);
//write(data);
}
}
});
找到另一个问题的答案:
(function (file) {
var reader = new FileReader();
reader.onload = function (readerData) {
var data = $.xml2json(readerData.target.result);
write(data);
}
reader.readAsText(file);
})(inputfiles[i]);
很有魅力。 =)
我正在尝试同时解析 2 个或更多 xml 个文件。意味着我可以选择例如 5 个 .xml 文件,然后它应该通过 jQuery 插件进行解析,然后写在页面上。 现在我的问题是:循环的第二次、第三次等迭代触发得太早,因此第一个文件得到 "lost".
我的尝试:
var input = $("#xmlInput");
input.change(function () {
var inputfiles = input[0].files;
for (var i = 0; i < inputfiles.length; i++) {
var reader = new FileReader();
reader.readAsText(inputfiles[i]);
reader.onloadend = function () {
var data = $.xml2json(reader.result);
console.log(data);
//write(data);
}
}
});
这只是一个猜测,但它有助于将 FileReader 分配给不同的变量吗?
var temp = {};
var input = $("#xmlInput");
input.change(function () {
var inputfiles = input[0].files;
for (var i = 0; i < inputfiles.length; i++) {
temp["reader"+i] = new FileReader();
temp["reader"+i].readAsText(inputfiles[i]);
temp["reader"+i].onloadend = function () {
var data = $.xml2json(temp["reader"+i].result);
console.log(data);
//write(data);
}
}
});
找到另一个问题的答案:
(function (file) {
var reader = new FileReader();
reader.onload = function (readerData) {
var data = $.xml2json(readerData.target.result);
write(data);
}
reader.readAsText(file);
})(inputfiles[i]);
很有魅力。 =)