jQuery每个+ FileReader都没有返回正确的值

时间:2015-06-16 08:45:15

标签: javascript jquery each filereader

我试图阅读2个包含各行数字的CSV文件。

<input type="file" id="file[0]" name="file[0]">
<input type="file" id="file[1]" name="file[1]">

文件1内容:

111
222

文件2内容:

333
444

阅读完内容后,我将数字推送到新数组(csv_arr)并计算出现次数(csv_cnt)。

var csv_arr = new Array();
var csv_cnt = 0;

$("[id^=file]").each(function(index) {
    file = $(this)[0].files[0];

    if (file) {
        var reader = new FileReader();
        reader.onload = function(e) {
            var csv_val = e.target.result.split("\r\n");

            for (var i = 0; i < csv_val.length; i++) {
                csv_arr.push( csv_val[i] );
                csv_cnt++;
            }
        };
        reader.readAsText(file);
    }
});

console.log(csv_arr);
console.log(csv_arr.length);
console.log(csv_cnt);

console.log的结果是:

['111','222','333','444']
0
0

从结果中可以看出,数组看起来没问题,但是数组的长度和数量都是0!我被卡住了,不知道出了什么问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的代码正常,忘记filereader 异步。 这意味着当onload仍在加载数据时,您的console.logs将会触发。

不。您的数组(至少使用您发布的确切代码)无法产生您所说的内容 - 否则您将获得44,因为数据包含值。这意味着你得到了这个:

[]
0
0

将console.logs传递到onload函数,你就可以得到:

["111", "222"]
2
2
["111", "222", "333", "444"]
4
4