Чтение и вывод данных из нескольких файлов
Здравствуйте!
Есть такая проблема, не получается прочитать и вывести данные из нескольких файлов (пробовал на 2, 3 и 4 файлах формата ".html"). При выборе файлов и запуске скрипта выводятся данные ТОЛЬКО из последнего выбранного файла. Причем выводятся столько раз, сколько выбрано файлов. НО! если в определенное место вписать "alert()" (в приведенном коде указано куда), то все работает верно и выводятся все данные. Написал такой код: html:
<input type="file" id="file" multiple>
<button onclick="readFile(document.getElementById('file'))">Прочитать!</button>
<div id="text"> </div>
javascript:
function readFile(object)
{
//если вписать сюда alert(); то все работает верно, иначе выводит данные на каждом шаге цикла только из последнего файла
var i;
var file = object.files;
var f;
for (i = 0, f; f = file[i]; i++)
{
reader = new FileReader();
reader.onload = function()
{
document.getElementById('text').innerHTML += reader.result;
document.getElementById('text').innerHTML += "</br>";
}
reader.readAsText(f);
}
}
javascript'ом занимаюсь недавно. Вопрос: 1. как сделать верно вывод данных из файла, без "alert()" 2. как можно сделать открытие файлов без использования "input". Пробовал через массив, в котором находятся пути к файлам, не получилось. |
рекурсия
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>
<input type="file" id="file" multiple>
<button onclick="readFile(document.getElementById('file'))">Прочитать!</button>
<div id="text"> </div>
<script type="text/javascript">
function readFile(object)
{
//если вписать сюда alert(); то все работает верно, иначе выводит данные на каждом шаге цикла только из последнего файла
var i=0;
var file = object.files;
var f;
(function fn(){
f = file[i++];
reader = new FileReader();
reader.onload = function(){
document.getElementById('text').innerHTML += reader.result;
document.getElementById('text').innerHTML += "</br>";
if(file[i]) fn();
};
reader.readAsText(f);
})();
}
</script>
</body>
</html>
|
|
Promise.all
Только чтение файла надо "промисифицировать" |
Благодарю! Помогло)
Можете еще пояснить, почему при добавлении "alert()" код работал верно? |
Nikc174,
alert задерживал выполнение и файл успевал прочитаться. |
j0hnik,
понятно. А кроме как через "input" файлы вообще никак нельзя открыть? |
Либо кнопка либо дроп файл, других способов не знаю, может и есть какой костыль для какого нибудь браузера.
|
| Часовой пояс GMT +3, время: 21:47. |