Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
26 Июль 2025, 05:15:46
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Страниц  :   Вниз
  Печать  
Автор Тема: Re: ActionScript 3.0 - асинхронность чтоб ее (((  (Прочитано 1544 раз)
0 Пользователей и 1 Гость смотрят эту тему.
spammer
Почетный гродненец
*****

Репутация: +78/-19
Offline Offline

Пол: Мужской
Сообщений: 1455


Пыхнуть не хотите?

Просмотр профиля
« Ответ #0 : 11 Февраль 2010, 10:12:08 »

URLLoader.data доступен только после диспатча "complete" события от URLLoader, как и написано в доках. Следовательно, получить XML (посредством каста URLLoader.data в XML), можно либо в обработчике этого события, либо после этого обработчика (т.к. по сути AS3 имеет только один поток исполнения, и конкурентно влезть наряду с обработчиком не получится).

Стандартный вариант, метод getXML() будет возвращать null до тех пор, пока не завершена загрузка (инициируется вызовом load()), при успешной загрузке сам объект диспатчнет "complete" событие (стандартный паттерн асинхронности AS3, построенной на событиях и листенерах):

Код:
package {

import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLRequest;

[Event(name="complete", type="flash.events.Event")]
public class AsyncXML extends EventDispatcher {

private var _xml:XML;
public function get xml():XML {
return _xml;
}

private var url:String;
private var loader:URLLoader;

public function AsyncXML(url:String) {
this.url = url;
}

public function load() {
if (loader != null) return;

var request:URLRequest = new URLRequest(url);
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loaderComplete);
loader.load(request);
}

private function loaderComplete(event:Event):void {
try {
_xml = new XML(loader.data);
} catch (e:TypeError) {
trace(e.getStackTrace());
}

loader.removeEventListener(Event.COMPLETE, loaderComplete);
loader = null;

if (_xml != null) {
dispatchEvent(new Event(Event.COMPLETE));
}
}
}
}
« Последнее редактирование: 11 Февраль 2010, 23:37:17 от spammer » Записан
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2025, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,123 секунд. Запросов: 20.