Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   член класса (задаю значения) (http://www.flasher.ru/forum/showthread.php?t=157440)

Wolf 05.06.2011 23:45

член класса (задаю значения)
 
вот есть такой код
Код AS3:

package
{
        //import vk.api.serialization.json;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.net.URLVariables;
        import flash.net.URLRequestMethod;
        import flash.events.Event;
        import vk.api.serialization.json.*;
        public class Server
        {
                private static const url:String = 'http://pira.ru/api.php';
                private static const skey:String = '812c0598112c692ab9e7dc2af0674cc3';
                private var loader:URLLoader;
                private var request:URLRequest;
                public var resp:Object;
 
                public function Server()
                {
                        loader=new URLLoader();
                        loader.addEventListener(Event.COMPLETE, onComplete);
                }
 
                public function getData(...params)
                {
                        request = new URLRequest(url);
                        request.method = URLRequestMethod.POST;
                        var vars:URLVariables = new URLVariables();
                        if (params[0])
                        {
                                vars['do'] = params[0];
                        }
 
                        if (params.length > 1 && params.length % 2 == 1)
                        {
                                for (var i=1; i<params.length; i++)
                                {
                                        if (i % 2 == 1)
                                        {
                                                vars[params[i]] = params[i + 1];
                                        }
                                }
                        }
                        vars['skey'] = skey;
                        request.data = vars;
                        loader.load(request);
                }
 
                public function onComplete(e:Event)
                {
                        var js=new JSON()
                        trace(loader.data);
                        this.resp=js.decode(loader.data);
                        trace(resp.DATA.characters[1]);
                }
 
        }
 
}

запрос успешно выполняется. но после этого хоть я и переменной класа this.resp надаю значения, она также пуста и в loader.data также пусто. не могу понять почему так.

dimarik 06.06.2011 00:00

Если loader.data пуста, а Вы ожидаете там какой-то ответ, то воспользуйтесь любым HTTP-снифером, чтобы проверить что к вам приходит. Я пользую Flidder2

P.S. Wolf? У нас есть еще подобные свободные ники?

Добавлено через 23 минуты
Я немного обескуражен. Вы сказали, что
Цитата:

loader.data также пусто
Затем Вы утверждаете, что
Цитата:

loader.data не пуста
Возможно, что именно из
Код AS3:

trace(resp.DATA.characters[1]);

Вы получаете null?

Wolf 06.06.2011 00:06

ответ присылает мне сервер в формате json. я его декодирую и полученый объект назаначаю переменной. в функции onComplete(событие) loader.data не пуста и this.resp надано значение. но за пределами этой функции это просто ссылки на NULL

dimarik 06.06.2011 00:33

Я испытал первую машину времени.

Wolf 06.06.2011 00:37

хах) просто сообщение модерировалось.

так почему так? я же члену класа надаю значение, а оно куда-то пропадает

dimarik 06.06.2011 00:46

Хех. Я сам пытался возвратиться в прошлое. Я модератор.
Я думаю, что ключевое слово "надаю" обладает более сильным кунг-фу, чем я предполагал ранее.

Переспрошу. Только здесь вы получаете null?
Код AS3:

trace(resp.DATA.characters[1]);


Wolf 06.06.2011 00:59

здесь я получаю нормальное значение.

Код AS3:

package {
 
        import flash.display.MovieClip;
        import flash.display.Sprite;
 
        public class Main extends Sprite {
                var flashVars:Object = stage.loaderInfo.parameters as Object;
 
                public function Main() {
                        trace("Start");
                        var s:Server=new Server();
                        s.getData('getAccount','id','62810564');
                        trace(s.resp.DATA.characters); //вот здесь нуль
                        //var Acc:Account=new Account();
 
                }
        }
 
}

Код AS3:

package
{
        //import vk.api.serialization.json;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.net.URLVariables;
        import flash.net.URLRequestMethod;
        import flash.events.Event;
        import vk.api.serialization.json.*;
        public class Server
        {
                private static const url:String = 'http://pira.ru/api.php';
                private static const skey:String = '812c0598112c692ab9e7dc2af0674cc3';
                private var loader:URLLoader;
                private var request:URLRequest;
                public var resp:Object;
 
                public function Server()
                {
                        loader=new URLLoader();
                        loader.addEventListener(Event.COMPLETE, onComplete);
                }
 
                public function getData(...params)
                {
                        request = new URLRequest(url);
                        request.method = URLRequestMethod.POST;
                        var vars:URLVariables = new URLVariables();
                        if (params[0])
                        {
                                vars['do'] = params[0];
                        }
 
                        if (params.length > 1 && params.length % 2 == 1)
                        {
                                for (var i=1; i<params.length; i++)
                                {
                                        if (i % 2 == 1)
                                        {
                                                vars[params[i]] = params[i + 1];
                                        }
                                }
                        }
                        vars['skey'] = skey;
                        request.data = vars;
                        loader.load(request);
trace(loader.data); //здесь тоже
                }
 
                public function onComplete(e:Event)
                {
                        var js=new JSON()
                        trace(loader.data);
                        this.resp=js.decode(loader.data);
                        trace(resp.DATA.characters[1]);
                }
 
        }
 
}


dimarik 06.06.2011 01:06

Вот теперь я понял, что ничем не могу помочь.

Wolsh 06.06.2011 05:32

[offtop]В принципе, с помощью машины времени реально унести запрос на несколько секунд в прошлое, чтобы к тому моменту когда плеер соберется его сделать, он уже был обработан сервером и плеер получил ответ.[/offtop]
Wolf, флэш не останавливается после каждой строчки, ожидая что ему надают. Если послали запрос, надо таки дождаться ответа – вот когда он придет, будет вызван обработчик onComplete и только "из него" можно продолжить работать с полученными данными.

Wolf 06.06.2011 15:05

дело в том что обработчик onComplete вызывается. и теле этого обработчика я надаю члену класа значение. но когда обработчик законччит свою работу все даные пропадают.

как мне тогда решить эту проблему? мне надо отправить на сервер зарос. сервер обрабатывает даные и дает ответ в формате json а мне надо эти даные обработать, сохранить и передать класу Account который отвечает за информацию о аккаунте в игре.

Код AS3:

package {
 
        import flash.display.MovieClip;
        import flash.display.Sprite;
 
        public class Main extends Sprite {
                var flashVars:Object = stage.loaderInfo.parameters as Object;
 
                public function Main() {
                        trace("Start");
                        var s:Server=new Server();
                        s.getData('getAccount','id','62810564');
                        trace(s.resp.DATA.characters);//NULL хотя я вызвал фунцию getData и обработчик запроса, который вызывается именно в ней закончил свою работу.
                        //var Acc:Account=new Account();
 
                }
        }
 
package
{
        //import vk.api.serialization.json;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.net.URLVariables;
        import flash.net.URLRequestMethod;
        import flash.events.Event;
        import vk.api.serialization.json.*;
        public class Server
        {
                private static const url:String = 'http://pira.ru/api.php';
                private static const skey:String = '812c0598112c692ab9e7dc2af0674cc3';
                private var loader:URLLoader;
                private var request:URLRequest;
                public var resp:Object;
 
                public function Server()
                {
                        loader=new URLLoader();
                        loader.addEventListener(Event.COMPLETE, onComplete);
                }
 
                public function getData(...params)
                {
                        request = new URLRequest(url);
                        request.method = URLRequestMethod.POST;
                        var vars:URLVariables = new URLVariables();
                        if (params[0])
                        {
                                vars['do'] = params[0];
                        }
 
                        if (params.length > 1 && params.length % 2 == 1)
                        {
                                for (var i=1; i<params.length; i++)
                                {
                                        if (i % 2 == 1)
                                        {
                                                vars[params[i]] = params[i + 1];
                                        }
                                }
                        }
                        vars['skey'] = skey;
                        request.data = vars;
                        loader.load(request);
                }
 
                public function onComplete(e:Event)
                {
                        var js=new JSON()
                        trace(loader.data);
                        this.resp=js.decode(loader.data);
                        trace(resp.DATA.characters[1]);
                }
 
        }
 
}
}

Код AS3:

package pir {
          import flash.net.LocalConnection;
  import flash.external.ExternalInterface;
  import flash.events.*;
  import flash.utils.setTimeout;
        public class Account {
                private var id:int;
                private var characters:String;
                private var gm:Boolean;
                private var ban:Boolean;
                public function Account() {
                        var serv:Server=new Server();
 
                        trace("sds");
                        serv.getData('getAccount','id',serv.flashVars['viewer_id']);
                        trace(serv.resp.DATA.characters[0]);//такое тоже не катит
                }
 
        }
 
}



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

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