Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Веб-программирование > JavaScript / HTML

JavaScript / HTML Создание динамической разметки страниц

Ответ
 
Опции темы
Старый 14.11.2012, 18:23   #1
ІГРОГРАЙКО
ПроЭктировщик
 
Аватар для ІГРОГРАЙКО
 
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений
(для 24 пользователей)
Какого лисого!

var files = evt.target.files; // FileList object
		
		mfile = files[0];
                var reader = new FileReader();
		reader.readAsArrayBuffer(mfile);
		var DATA;
		reader.onload = loaded;
		alert(DATA);
		
		function loaded(evt) {
			DATA = evt.target.result;
		}
Почему оно выводит: undefined ????
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
(Offline)
 
Ответить с цитированием
Старый 14.11.2012, 18:49   #2
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Очевидно потому что между var DATA; и alert(DATA); в переменную DATA ничего не записывалось.

Ещё напомню что ф-я reader.onload выполняется асинхронно, т.е. на следующей же строчке в alert(DATA); будет undefined, т.к. ещё не случилось событие onload. Алерт следует перенести вовнутрь ф-ии loaded.
(Offline)
 
Ответить с цитированием
Старый 14.11.2012, 19:47   #3
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Какого лисого!

Всё верно АВТОМАТ сказал.
JavaScript - очень асинхронный. Не зря его классифицируют как event-driven language.
Суть в том что ты присваиваешь событие, которое будет вызвано когда-то потом, но не сразу. Т.к. операция на которую ты подписываешься произойдёт позже.
Это как событие click - когда пользователь нажмёт на кнопку. Тут тоже самое.

Также у тебя ошибка, которая редко ловиться но возможна в некоторых броузерах. Заключается она в том что ты должен подписываться на событие ДО того как указываешь важное данное для триггера этого события.
Например когда создаёшь новую картинку, перед тем как ты укажешь ей путь, ты должен присвоить событие. Либо если эта картинка уже в кеше броузера, некоторые броузеры вызовут событие onload в момент присвоения пути к картинке, а т.к. ты его ещё не назначил - оно не сработает.

Следственно присваивай событие до того как указываешь источник данных / путь к файлу.

Также используй console.log заместо alert.
В Firefox, Chrome и других нормальных броузерах есть консоль - в него и будет выводиться твои данные при вызове console.log.
Умный Inspector будет форматировать эти данные красиво, например json объекты там ваще круто выглядят.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ІГРОГРАЙКО (15.11.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 05:24.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com