![]() |
|
||||||||||
|
|||||
|
вот есть такой код
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]); } } } Последний раз редактировалось Wolf; 06.06.2011 в 00:01. |
|
|||||
|
.
|
Если loader.data пуста, а Вы ожидаете там какой-то ответ, то воспользуйтесь любым HTTP-снифером, чтобы проверить что к вам приходит. Я пользую Flidder2
P.S. Wolf? У нас есть еще подобные свободные ники? Добавлено через 23 минуты Я немного обескуражен. Вы сказали, что Цитата:
Цитата:
Последний раз редактировалось dimarik; 06.06.2011 в 00:23. |
|
|||||
|
ответ присылает мне сервер в формате json. я его декодирую и полученый объект назаначаю переменной. в функции onComplete(событие) loader.data не пуста и this.resp надано значение. но за пределами этой функции это просто ссылки на NULL
|
|
|||||
|
.
|
Хех. Я сам пытался возвратиться в прошлое. Я модератор.
Я думаю, что ключевое слово "надаю" обладает более сильным кунг-фу, чем я предполагал ранее. Переспрошу. Только здесь вы получаете null? Последний раз редактировалось dimarik; 06.06.2011 в 00:48. |
|
|||||
|
здесь я получаю нормальное значение.
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(); } } } 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]); } } } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
[offtop]В принципе, с помощью машины времени реально унести запрос на несколько секунд в прошлое, чтобы к тому моменту когда плеер соберется его сделать, он уже был обработан сервером и плеер получил ответ.[/offtop]
Wolf, флэш не останавливается после каждой строчки, ожидая что ему надают. Если послали запрос, надо таки дождаться ответа – вот когда он придет, будет вызван обработчик onComplete и только "из него" можно продолжить работать с полученными данными.
__________________
Reality.getBounds(this); |
|
|||||
|
дело в том что обработчик onComplete вызывается. и теле этого обработчика я надаю члену класа значение. но когда обработчик законччит свою работу все даные пропадают.
как мне тогда решить эту проблему? мне надо отправить на сервер зарос. сервер обрабатывает даные и дает ответ в формате json а мне надо эти даные обработать, сохранить и передать класу Account который отвечает за информацию о аккаунте в игре. 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]); } } } } 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, время: 21:10. |
|
|
« Предыдущая тема | Следующая тема » |
|
|