![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
|
"Зашился" с такой дилеммой:
есть экземпляр класса loader:URLLoader(), с его помощью происходит загрузка запроса к таблице в базе данных мускул через пхп-файлик, запрос передавается в качестве параметра URLRequest(var). Он представляет собой выборку значений из базы. Получение значения происходит следующим образом: создается слушатель события Event.COMPLETE, функция, указанная в котором, запускается соответственно уже после окончания загрузки. В функции обрабатывается значение loader.data, в котором хранится результат выборки. Значение обрабатывается корректно, все чики-пики. Но факт в том, что после того, как приходит черед выполнения функции, указанной в слушателе этого события, никакие действия, указанные после момента получения выборки, уже не выполняются, как-то прорисовка Sprite'ов, кнопок, текстовых полей и т.д. Как же сделать какие-то действия после получения значения из базы? В зависимости от него что-то будет или не будет происходить. Плз, помогите советом, два дня уже колупаюсь.. ![]() |
|
|||||
|
Что говорит trace() результата запроса?
__________________
$world->answer_for_request($_REQUEST['hello,world!']); ICQ: 336637242 |
|
|||||
|
Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
|
trace() работает корректно, он отображает результат запроса query() из базы. Суть в том, что в тот момент, когда происходит обращение к результату выборки в функции слушателя, в коде не удается произвести никакие действия. Я попытался попробовать использовать другие события, кроме Event.COMPLETE, но на них функция не реагирует вообще. Я что-то не так делаю? подскажите, плиз..
Последний раз редактировалось deceiver; 16.08.2010 в 13:47. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Если вы не пытаетесь использовать ответ от сервера до Event.COMPLETE, то явно где-то возникает исключение. Странно, что его вам под нос не суют (дебаговый плеер(?)). Ну можно например найти строку, в которой trace уже не работает и искать проблемы в строке выше, 99 к 1, что что-то там есть, типа обращения по нулевому указателю.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
|
То есть это может быть проблема в плеере? Все функции, которые выполняют действия, запускаются до ф-ции, ассоциированной с Event.COMPLETE, а trace() отлавливается только в слушателе, никак не раньше
Последний раз редактировалось deceiver; 16.08.2010 в 16:02. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Почти нереально, чтоб из-за проблем в плеере что-то не отрисовывалось итп., просто если поставить дебаговый, то может больше расскажет про ошибки.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
|
Так как поступить в данной ситуации оптимальным образом? Можете подсказать? Возможно, это корректное поведение приложения, и после выполнения события Event.COMPLETE ни одно действие не выполняется в коде, и необходимо или другое событие, или обработка исключения, если это некорректное поведение? Однако, в случае, если происходит исключение, то доступ к результату выборки возможно и не способен быть получен до наступления этого события? Тогда для реализации данной функциональности необходимо прибегнуть к использованию других классов и подхода, в частности сокетов, а не URLLoader()?
Дебаг-версия: вот тут? http://download.macromedia.com/pub/f...ugin_debug.exe Последний раз редактировалось deceiver; 17.08.2010 в 11:25. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Найти ошибку. Что тут думать - трясти надо. После Event.COMPLETE всё работает как и до.
Кабы минимальный код на котором воспроизводится дали (с краткими пояснениями, чего хотим и чего происходит), то во-первых в процессе его получения хороший шанс, что поняли бы, в чем дело, а во-вторых можно было бы помочь. Ещё (как по мне) можно изьясняться попроще и пояснее, т.к. что конкретно значит "после того, как приходит черед выполнения функции, указанной в слушателе этого события" я не понял. Дебаг плеер там, да. Но это для браузера. Ещё неплохо бы попробовать в http://download.macromedia.com/pub/f...ayer_10_sa.exe запустить.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 17.08.2010 в 12:25. |
|
|||||
|
Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
|
Обнаружилось частично, почему не запускается код.
Здесь привожу фрагмент из приложения: var variables:URLVariables = new URLVariables(); variables.qu = "SELECT max( game_id ) FROM game WHERE game_completed = 0"; var request:URLRequest = new URLRequest("http://localhost/tests/criss-cross/databaseconnect.php"); request.data = variables; request.method = URLRequestMethod.POST; loader = new URLLoader(); loader.addEventListener(Event.COMPLETE, startListener); loader.load(request); public function startListener (e:Event):void { trace(loader.data); //Тестовое поле var t:TextField = new TextField(); t.autoSize = TextFieldAutoSize.LEFT; t.border = true; t.background = false; t.selectable = false; t.text = "ola"; t.y = 300; addChild(t); var query_res:Number = loader.data; trace(query_res); Но, чтобы не засорять главный файл, я решил вынести этот фрагмент в другой класс сугубо для составления запроса и подключения к базе. И вот тогда loader.data отображается корректно, но поле не создается при прохождении через ф-цию startlistener. Как это работает, а точнее не : public class Connector extends Sprite { --- описание переменных --- public function Connector(queryText: String) { setURL(queryText); } public function setURL(variableText:String):void { var variables:URLVariables = new URLVariables(); variables.qu = variableText; --- тот же самый код --- } } Может быть, подключение к URLLoader'у нельзя "разносить" по отдельным сущностям? Пробовал без передачи в конструктор, а сразу в ф-цию: аналогично. В версии плеера для десктопа - то же. Последний раз редактировалось deceiver; 17.08.2010 в 16:55. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Даже подключение к мыше можно вынести в астрал (я сам не пробовал).
Возможно дело в том, что addChild(t); в главном классе добавляет к руту, а в коннекторе к коннектору, который, похоже, не добавлен в дисплей лист ("к руту") и вообще не понятно почему от спрайта унаследован. Больше гадать без того, что можно скопировать и скомпилировать не буду. И это, надеюсь про sql иньекции в курсе, а то уже руки чешутся написать variables.qu = "drop table game";
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 17.08.2010 в 17:10. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|