Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с XML 
:(
    Опции темы
Polar_wolf
Дата 21.8.2011, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 19.11.2007

Репутация: нет
Всего: нет



Добрый день. Я новичок в as так что возник довольно примитивный вопрос. Есть следующий код:
Код

public function Select_level(passed_class:Main)
        {
            btn_cemetery.addEventListener(MouseEvent.CLICK, req);                        
        }

private function req(ev:MouseEvent):void
        {            
            var query:String = "?source=db&call=getObject(0,0)";
            var con:Connect = new Connect();
            externalXML = con.Init(query);    
}

public class Connect
    {
        private var loader:URLLoader = new URLLoader  ;
        private var externalXML:XML = new XML();

        public function Connect()
        {
        }

        public function Init(query:String):XML
        {
            var request:URLRequest = new URLRequest("http://localhost:8080/" + query);
            loader.addEventListener(Event.COMPLETE,onComplete);
            try
            {
                loader.load(request);
            }
            catch (error:ArgumentError)
            {
                trace("An ArgumentError has occurred: " + error);
            }
            catch (error:SecurityError)
            {
                trace("A SecurityError has occurred: " + error);
            }
            return externalXML;
        }

        private function onComplete(event:Event):void
        {
            trace(event.target.data);
            if (loader != null)
            {
                externalXML = XML(event.target.data);
            }
            else
            {
                trace("Error!");
            }

        }
    }

В данном коде при нажатии кнопки идет запрос на сервер и возвращается xml. Но непосредственно в функции req я не могу получить доступ к содержимому externalXML, ругается, что он пустой. Хотя потом все благополучно выводится на экран. Есть подозрение, что надо как-то использовать Event.COMPLETE, но как и где непонятно, да и надо ли вообще. Заранее благодарен за помощь.

Это сообщение отредактировал(а) Polar_wolf - 21.8.2011, 22:31
PM MAIL   Вверх
SoWa
Дата 22.8.2011, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 1
Всего: 74



Айайай, Ну все ведь почти правильно сделал smile Разумеется, ХМЛ у тебя не вернется со скоростью света - ты видишь ту ХМЛ, которая в onComplete приходит.
Поэтому убирай вообще из метода Init return, пусть метод возвращает void, весь класс наследуй от EventDispatcher, переменную с ХМЛ делай public и в слушателе onComplete пиши так:
Код

if (loader != null)
{
externalXML = XML(event.target.data);
dispatchEvent(new Event("MyEvent"));
}

Теперь вернемся к тому месту, откуда ты это дергаешь:
Код

private var con:Connect = new Connect();

private function req(ev:MouseEvent):void
        {            
            var query:String = "?source=db&call=getObject(0,0)";
            con.addEventListener("MyEvent", xmlCompleteHandler);    
            con.Init();
}

private function xmlCompleteHandler(e:Event):void
{
var loadedXML = con.externalXML;
}


Вот как-то так. Я мог по памяти ошибиться с отправлениями событий - но верный путь задал, думаю, сможешь погуглить.
Можешь бонусом, чтобы не делать переменную в классе коннекта общедоступной, сделать еще один класс, наследуемый от Event, в него добавить поле XML и отправлять событие не new Event(), а new MyEvent().
где MyEvent будет примерно такой

public class MyEvent extends Event
{
public var exXml:XML;
public function MyEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false):void
{
super();
}
}

И как его отправлять:
var me:MyEvent = new MyEvent();
me.exXml = %сюда твою ХМЛ%
dispatchEvent(me);


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Polar_wolf
Дата 22.8.2011, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 19.11.2007

Репутация: нет
Всего: нет



Спасиб, очень помог. Все разложил по полочкам) А то на других форумах все больше понты и туманные отсылки на всякое))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.