![]() |
Обработка события Event.COMPLETE в классе URLLoader()
"Зашился" с такой дилеммой:
есть экземпляр класса loader:URLLoader(), с его помощью происходит загрузка запроса к таблице в базе данных мускул через пхп-файлик, запрос передавается в качестве параметра URLRequest(var). Он представляет собой выборку значений из базы. Получение значения происходит следующим образом: создается слушатель события Event.COMPLETE, функция, указанная в котором, запускается соответственно уже после окончания загрузки. В функции обрабатывается значение loader.data, в котором хранится результат выборки. Значение обрабатывается корректно, все чики-пики. Но факт в том, что после того, как приходит черед выполнения функции, указанной в слушателе этого события, никакие действия, указанные после момента получения выборки, уже не выполняются, как-то прорисовка Sprite'ов, кнопок, текстовых полей и т.д. Как же сделать какие-то действия после получения значения из базы? В зависимости от него что-то будет или не будет происходить. Плз, помогите советом, два дня уже колупаюсь.. :wacko: |
Что говорит trace() результата запроса?
|
trace() работает корректно, он отображает результат запроса query() из базы. Суть в том, что в тот момент, когда происходит обращение к результату выборки в функции слушателя, в коде не удается произвести никакие действия. Я попытался попробовать использовать другие события, кроме Event.COMPLETE, но на них функция не реагирует вообще. Я что-то не так делаю? подскажите, плиз..
|
Если вы не пытаетесь использовать ответ от сервера до Event.COMPLETE, то явно где-то возникает исключение. Странно, что его вам под нос не суют (дебаговый плеер(?)). Ну можно например найти строку, в которой trace уже не работает и искать проблемы в строке выше, 99 к 1, что что-то там есть, типа обращения по нулевому указателю.
|
То есть это может быть проблема в плеере? Все функции, которые выполняют действия, запускаются до ф-ции, ассоциированной с Event.COMPLETE, а trace() отлавливается только в слушателе, никак не раньше
|
Почти нереально, чтоб из-за проблем в плеере что-то не отрисовывалось итп., просто если поставить дебаговый, то может больше расскажет про ошибки.
|
Так как поступить в данной ситуации оптимальным образом? Можете подсказать? Возможно, это корректное поведение приложения, и после выполнения события Event.COMPLETE ни одно действие не выполняется в коде, и необходимо или другое событие, или обработка исключения, если это некорректное поведение? Однако, в случае, если происходит исключение, то доступ к результату выборки возможно и не способен быть получен до наступления этого события? Тогда для реализации данной функциональности необходимо прибегнуть к использованию других классов и подхода, в частности сокетов, а не URLLoader()?
Дебаг-версия: вот тут? http://download.macromedia.com/pub/f...ugin_debug.exe |
Найти ошибку. Что тут думать - трясти надо. После Event.COMPLETE всё работает как и до.
Кабы минимальный код на котором воспроизводится дали (с краткими пояснениями, чего хотим и чего происходит), то во-первых в процессе его получения хороший шанс, что поняли бы, в чем дело, а во-вторых можно было бы помочь. Ещё (как по мне) можно изьясняться попроще и пояснее, т.к. что конкретно значит "после того, как приходит черед выполнения функции, указанной в слушателе этого события" я не понял. Дебаг плеер там, да. Но это для браузера. Ещё неплохо бы попробовать в http://download.macromedia.com/pub/f...ayer_10_sa.exe запустить. |
Обнаружилось частично, почему не запускается код.
Здесь привожу фрагмент из приложения: Код AS3:
Но, чтобы не засорять главный файл, я решил вынести этот фрагмент в другой класс сугубо для составления запроса и подключения к базе. И вот тогда loader.data отображается корректно, но поле не создается при прохождении через ф-цию startlistener. Как это работает, а точнее не :): Код AS3:
Может быть, подключение к URLLoader'у нельзя "разносить" по отдельным сущностям? Пробовал без передачи в конструктор, а сразу в ф-цию: аналогично. В версии плеера для десктопа - то же. |
Даже подключение к мыше можно вынести в астрал (я сам не пробовал).
Возможно дело в том, что addChild(t); в главном классе добавляет к руту, а в коннекторе к коннектору, который, похоже, не добавлен в дисплей лист ("к руту") и вообще не понятно почему от спрайта унаследован. Больше гадать без того, что можно скопировать и скомпилировать не буду. И это, надеюсь про sql иньекции в курсе, а то уже руки чешутся написать variables.qu = "drop table game"; |
| Часовой пояс GMT +4, время: 21:18. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.