Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.08.2010, 17:08
deceiver вне форума Посмотреть профиль Отправить личное сообщение для deceiver Найти все сообщения от deceiver
  № 1  
Ответить с цитированием
deceiver

Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
По умолчанию Обработка события Event.COMPLETE в классе URLLoader()

"Зашился" с такой дилеммой:
есть экземпляр класса loader:URLLoader(), с его помощью происходит загрузка запроса к таблице в базе данных мускул через пхп-файлик, запрос передавается в качестве параметра URLRequest(var). Он представляет собой выборку значений из базы. Получение значения происходит следующим образом:

создается слушатель события Event.COMPLETE, функция, указанная в котором, запускается соответственно уже после окончания загрузки. В функции обрабатывается значение loader.data, в котором хранится результат выборки. Значение обрабатывается корректно, все чики-пики. Но факт в том, что после того, как приходит черед выполнения функции, указанной в слушателе этого события, никакие действия, указанные после момента получения выборки, уже не выполняются, как-то прорисовка Sprite'ов, кнопок, текстовых полей и т.д. Как же сделать какие-то действия после получения значения из базы? В зависимости от него что-то будет или не будет происходить.

Плз, помогите советом, два дня уже колупаюсь..

Старый 13.08.2010, 17:19
e_gamer вне форума Посмотреть профиль Отправить личное сообщение для e_gamer Найти все сообщения от e_gamer
  № 2  
Ответить с цитированием
e_gamer

Регистрация: Aug 2010
Адрес: MSK
Сообщений: 104
Отправить сообщение для e_gamer с помощью ICQ
Что говорит trace() результата запроса?
__________________
$world->answer_for_request($_REQUEST['hello,world!']);
ICQ: 336637242

Старый 16.08.2010, 13:44
deceiver вне форума Посмотреть профиль Отправить личное сообщение для deceiver Найти все сообщения от deceiver
  № 3  
Ответить с цитированием
deceiver

Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
trace() работает корректно, он отображает результат запроса query() из базы. Суть в том, что в тот момент, когда происходит обращение к результату выборки в функции слушателя, в коде не удается произвести никакие действия. Я попытался попробовать использовать другие события, кроме Event.COMPLETE, но на них функция не реагирует вообще. Я что-то не так делаю? подскажите, плиз..


Последний раз редактировалось deceiver; 16.08.2010 в 13:47.
Старый 16.08.2010, 13:53
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Если вы не пытаетесь использовать ответ от сервера до Event.COMPLETE, то явно где-то возникает исключение. Странно, что его вам под нос не суют (дебаговый плеер(?)). Ну можно например найти строку, в которой trace уже не работает и искать проблемы в строке выше, 99 к 1, что что-то там есть, типа обращения по нулевому указателю.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 16.08.2010, 14:12
deceiver вне форума Посмотреть профиль Отправить личное сообщение для deceiver Найти все сообщения от deceiver
  № 5  
Ответить с цитированием
deceiver

Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
То есть это может быть проблема в плеере? Все функции, которые выполняют действия, запускаются до ф-ции, ассоциированной с Event.COMPLETE, а trace() отлавливается только в слушателе, никак не раньше


Последний раз редактировалось deceiver; 16.08.2010 в 16:02.
Старый 16.08.2010, 16:55
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 6  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Почти нереально, чтоб из-за проблем в плеере что-то не отрисовывалось итп., просто если поставить дебаговый, то может больше расскажет про ошибки.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 17.08.2010, 11:05
deceiver вне форума Посмотреть профиль Отправить личное сообщение для deceiver Найти все сообщения от deceiver
  № 7  
Ответить с цитированием
deceiver

Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
Так как поступить в данной ситуации оптимальным образом? Можете подсказать? Возможно, это корректное поведение приложения, и после выполнения события Event.COMPLETE ни одно действие не выполняется в коде, и необходимо или другое событие, или обработка исключения, если это некорректное поведение? Однако, в случае, если происходит исключение, то доступ к результату выборки возможно и не способен быть получен до наступления этого события? Тогда для реализации данной функциональности необходимо прибегнуть к использованию других классов и подхода, в частности сокетов, а не URLLoader()?
Дебаг-версия: вот тут? http://download.macromedia.com/pub/f...ugin_debug.exe


Последний раз редактировалось deceiver; 17.08.2010 в 11:25.
Старый 17.08.2010, 11:37
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 8  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Найти ошибку. Что тут думать - трясти надо. После Event.COMPLETE всё работает как и до.
Кабы минимальный код на котором воспроизводится дали (с краткими пояснениями, чего хотим и чего происходит), то во-первых в процессе его получения хороший шанс, что поняли бы, в чем дело, а во-вторых можно было бы помочь. Ещё (как по мне) можно изьясняться попроще и пояснее, т.к. что конкретно значит "после того, как приходит черед выполнения функции, указанной в слушателе этого события" я не понял.
Дебаг плеер там, да. Но это для браузера. Ещё неплохо бы попробовать в http://download.macromedia.com/pub/f...ayer_10_sa.exe запустить.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 17.08.2010 в 12:25.
Старый 17.08.2010, 16:45
deceiver вне форума Посмотреть профиль Отправить личное сообщение для deceiver Найти все сообщения от deceiver
  № 9  
Ответить с цитированием
deceiver

Регистрация: Aug 2010
Адрес: Бобруйск
Сообщений: 20
Обнаружилось частично, почему не запускается код.
Здесь привожу фрагмент из приложения:
Код AS3:
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);
В случае, если код физически находится в главном as-файле приложения, все работает на "ура", создается текстфилд, переменные типа URLVariables, URLRequest видны на вкладке Переменные в режиме дебаггинга, значения также.

Но, чтобы не засорять главный файл, я решил вынести этот фрагмент в другой класс сугубо для составления запроса и подключения к базе. И вот тогда loader.data отображается корректно, но поле не создается при прохождении через ф-цию startlistener. Как это работает, а точнее не :
Код AS3:
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;
   --- тот же самый код ---
  }
}
startListener находится в этом же вторичном файле.
Может быть, подключение к URLLoader'у нельзя "разносить" по отдельным сущностям? Пробовал без передачи в конструктор, а сразу в ф-цию: аналогично. В версии плеера для десктопа - то же.


Последний раз редактировалось deceiver; 17.08.2010 в 16:55.
Старый 17.08.2010, 17:06
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 10  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Даже подключение к мыше можно вынести в астрал (я сам не пробовал).
Возможно дело в том, что addChild(t); в главном классе добавляет к руту, а в коннекторе к коннектору, который, похоже, не добавлен в дисплей лист ("к руту") и вообще не понятно почему от спрайта унаследован.
Больше гадать без того, что можно скопировать и скомпилировать не буду.
И это, надеюсь про sql иньекции в курсе, а то уже руки чешутся написать variables.qu = "drop table game";
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 17.08.2010 в 17:10.
Создать новую тему Ответ Часовой пояс GMT +4, время: 23:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.