Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2018, 16:13
Новичок на форуме
Отправить личное сообщение для Nikc174 Посмотреть профиль Найти все сообщения от Nikc174
 
Регистрация: 14.06.2018
Сообщений: 3

Чтение и вывод данных из нескольких файлов
Здравствуйте!
Есть такая проблема, не получается прочитать и вывести данные из нескольких файлов (пробовал на 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". Пробовал через массив, в котором находятся пути к файлам, не получилось.
Ответить с цитированием
  #2 (permalink)  
Старый 14.06.2018, 16:34
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 2,960

рекурсия
<!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>
Ответить с цитированием
  #3 (permalink)  
Старый 14.06.2018, 16:36
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 2,960

и вот это гляньте

https://javascript.ru/basic/closure#...-ispolzovaniya
Ответить с цитированием
  #4 (permalink)  
Старый 14.06.2018, 16:48
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,011

1. this.result
2. никак
Ответить с цитированием
  #5 (permalink)  
Старый 14.06.2018, 16:49
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 539

Promise.all
Только чтение файла надо "промисифицировать"
Ответить с цитированием
  #6 (permalink)  
Старый 15.06.2018, 15:19
Новичок на форуме
Отправить личное сообщение для Nikc174 Посмотреть профиль Найти все сообщения от Nikc174
 
Регистрация: 14.06.2018
Сообщений: 3

Благодарю! Помогло)
Можете еще пояснить, почему при добавлении "alert()" код работал верно?
Ответить с цитированием
  #7 (permalink)  
Старый 15.06.2018, 15:21
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 2,960

Nikc174,
alert задерживал выполнение и файл успевал прочитаться.
Ответить с цитированием
  #8 (permalink)  
Старый 15.06.2018, 15:24
Новичок на форуме
Отправить личное сообщение для Nikc174 Посмотреть профиль Найти все сообщения от Nikc174
 
Регистрация: 14.06.2018
Сообщений: 3

j0hnik,
понятно. А кроме как через "input" файлы вообще никак нельзя открыть?
Ответить с цитированием
  #9 (permalink)  
Старый 15.06.2018, 15:54
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 2,960

Либо кнопка либо дроп файл, других способов не знаю, может и есть какой костыль для какого нибудь браузера.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Htaccess, как запретить доступ ко всем кроме нескольких файлов eddin Серверные языки и технологии 8 18.02.2016 18:32
Nodejs, busboy, загрузка нескольких файлов, не корректно вызывается событие 'finish' master_alf AJAX и COMET 1 07.10.2014 10:08
Отсылка нескольких файлов одним post koeshiro AJAX и COMET 1 19.09.2014 14:08
отправка данных из формы и вывод полученных данных sxe jQuery 2 20.05.2013 23:34
Вывод данных в Друпал 6 из MySQL, небольшая работа torquemada Работа 1 22.05.2011 16:05