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

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

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

Регистрация: Jun 2011
Сообщений: 83
Записей в блоге: 1
По умолчанию член класса (задаю значения)

вот есть такой код
Код 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 также пусто. не могу понять почему так.


Последний раз редактировалось Wolf; 06.06.2011 в 00:01.
Старый 06.06.2011, 00:00
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 2  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Если loader.data пуста, а Вы ожидаете там какой-то ответ, то воспользуйтесь любым HTTP-снифером, чтобы проверить что к вам приходит. Я пользую Flidder2

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

Добавлено через 23 минуты
Я немного обескуражен. Вы сказали, что
Цитата:
loader.data также пусто
Затем Вы утверждаете, что
Цитата:
loader.data не пуста
Возможно, что именно из
Код AS3:
trace(resp.DATA.characters[1]);
Вы получаете null?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 06.06.2011 в 00:23.
Старый 06.06.2011, 00:06
Wolf вне форума Посмотреть профиль Отправить личное сообщение для Wolf Найти все сообщения от Wolf
  № 3  
Ответить с цитированием
Wolf

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

Старый 06.06.2011, 00:33
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Я испытал первую машину времени.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 06.06.2011, 00:37
Wolf вне форума Посмотреть профиль Отправить личное сообщение для Wolf Найти все сообщения от Wolf
  № 5  
Ответить с цитированием
Wolf

Регистрация: Jun 2011
Сообщений: 83
Записей в блоге: 1
хах) просто сообщение модерировалось.

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

Старый 06.06.2011, 00:46
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Хех. Я сам пытался возвратиться в прошлое. Я модератор.
Я думаю, что ключевое слово "надаю" обладает более сильным кунг-фу, чем я предполагал ранее.

Переспрошу. Только здесь вы получаете null?
Код AS3:
trace(resp.DATA.characters[1]);
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 06.06.2011 в 00:48.
Старый 06.06.2011, 00:59
Wolf вне форума Посмотреть профиль Отправить личное сообщение для Wolf Найти все сообщения от Wolf
  № 7  
Ответить с цитированием
Wolf

Регистрация: Jun 2011
Сообщений: 83
Записей в блоге: 1
здесь я получаю нормальное значение.

Код 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]);
		}
 
	}
 
}

Старый 06.06.2011, 01:06
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Вот теперь я понял, что ничем не могу помочь.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 06.06.2011, 05:32
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
[offtop]В принципе, с помощью машины времени реально унести запрос на несколько секунд в прошлое, чтобы к тому моменту когда плеер соберется его сделать, он уже был обработан сервером и плеер получил ответ.[/offtop]
Wolf, флэш не останавливается после каждой строчки, ожидая что ему надают. Если послали запрос, надо таки дождаться ответа – вот когда он придет, будет вызван обработчик onComplete и только "из него" можно продолжить работать с полученными данными.
__________________
Reality.getBounds(this);

Старый 06.06.2011, 15:05
Wolf вне форума Посмотреть профиль Отправить личное сообщение для Wolf Найти все сообщения от Wolf
  № 10  
Ответить с цитированием
Wolf

Регистрация: Jun 2011
Сообщений: 83
Записей в блоге: 1
дело в том что обработчик 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:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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