【问题标题】:Filereader gets overwritten when multiple files are active当多个文件处于活动状态时,文件阅读器会被覆盖
【发布时间】:2023-12-02 01:58:01
【问题描述】:

我正在尝试一次解析 2 个或更多 xml 文件。意味着我可以选择例如 5 个 .xml 文件,然后它应该通过 jQuery 插件进行解析并随后写入页面上。 现在我的问题是:循环的第二次、第三次等迭代过早触发,因此第一个文件“丢失”。

我的尝试:

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);
      }
    }
 });   

【问题讨论】:

    标签: jquery loops parsing filereader html5-filesystem


    【解决方案1】:

    这只是一个猜测,但将 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);
             }
           }
        });   
    

    【讨论】:

    • 感谢帮助,但 "temp["reader"+i].result" 返回未定义,知道为什么吗?
    【解决方案2】:

    在另一个问题上找到了答案:

    (function (file) {
       var reader = new FileReader();
       reader.onload = function (readerData) {
          var data = $.xml2json(readerData.target.result);
          write(data);
       }
       reader.readAsText(file);
    })(inputfiles[i]);
    

    像魅力一样工作。 =)

    【讨论】: