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

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

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

Регистрация: Mar 2011
Сообщений: 5
Question URLLoader работает только в одном экземпляре класса

Приветствую

я написал класс для взаимодействия с php-скриптом, который обрабатывает запросы к mysql. запросы отправляю через URLLoader, вот обрезанный пример класса:

Код AS3:
public class SQLWrapper extends MovieClip
{
	private var serverUrl:String = "http://192.168.177.128/";
	private var request:URLRequest;
	private var variables:URLVariables;
	private var loader:URLLoader;
	private var id:Number;	
	public  var object:Object;
	public 	static const DATA_LOADED:String = "DATA_LOADED";
 
	public function SQLWrapper(_id:Number, _object:Object = null) 	{
		object = _object;
		id = _id;
	}
 
	private function sndRequest():void {
		variables = new URLVariables();
		variables.id = id;
 
		request = new URLRequest();
		request.url = serverUrl;
		request.method = URLRequestMethod.GET;
		request.data = variables
 
		loader = new URLLoader();
		loader.addEventListener(Event.COMPLETE, rcv_hello);
		loader.load(request);	
	}
 
	private function rcvResponse(e:Event = null):void {
		loader.removeEventListener(Event.COMPLETE, dataLoaded);
 
		xml = XML(loader.data);
		sid = xml.children()[0].sid;
 
		trace(sid);
		dispatchEvent(new Event(SQLWrapper.DATA_LOADED));	
	}
}
все работает ок, но когда я создаю 2 экземпляра класса и вызываю в каждом функцию sndRequest(), запрос посылается только один, а событие лоадера COMPLETE срабатывает в каждом классе, и выводится два одинаковых sid.
вот пример создания экземпляров:

Код AS3:
public class Main
{
	public function Main():void
	{		
		var market:Market = new Market();
		stage.addChild(market);
 
		getMarketItems(market);
	}
 
	private function getMarketItems(market:Object):void {
		var sql_a:SQLWrapper = new SQLWrapper(1, market);
		sql_a.addEventListener(SQLWrapper.RESPONSE, marketResponse);
		sql_a.sendRequest();
	}
 
	private function marketResponse(e:Event = null):void {
		var market:Market = Market(e.target.object);
		var item:MarketItem = new MarketItem();
 
		market.addItem(item);
		getItemStats(item);
	}
 
	private function getItemStats(item:Object):void {
		var sql_b:SQLWrapper = new SQLWrapper(2, item);
		sql_b.addEventListener(SQLWrapper.RESPONSE, itemResponse);
		sql_b.sendRequest();
	}
 
	private function itemResponse(e:Event = null):void {
		var item:MarketItem = MarketItem(e.target.xml.sid);
		item.addStat(sid);
	}
}
во флеше шарю хреново и не совсем понимаю почему это происходит. подскажите что не так?

Старый 21.03.2011, 05:00
miki вне форума Посмотреть профиль Отправить личное сообщение для miki Найти все сообщения от miki
  № 2  
Ответить с цитированием
miki

Регистрация: Jan 2011
Сообщений: 46
У тебя ошибка в методе sndRequest()
надо variables.id = _id;

Старый 21.03.2011, 11:59
nka1024 вне форума Посмотреть профиль Отправить личное сообщение для nka1024 Найти все сообщения от nka1024
  № 3  
Ответить с цитированием
nka1024

Регистрация: Mar 2011
Сообщений: 5
Цитата:
Сообщение от miki Посмотреть сообщение
У тебя ошибка в методе sndRequest()
надо variables.id = _id;
почему?

Старый 21.03.2011, 21:13
carrotoff вне форума Посмотреть профиль Отправить личное сообщение для carrotoff Найти все сообщения от carrotoff
  № 4  
Ответить с цитированием
carrotoff
 
Аватар для carrotoff

Регистрация: May 2010
Сообщений: 543
Внимательно код не изучал, но если верить словам, что срабатывает событие COMPLETE 2 раза, могу сказать следующее:

оба запроса посылаются на один url с одинаковыми параметрами?
URLRequest по умолчанию кэширует ответ сервера, потому как свойство URLRequest.cacheResponse по умолчанию true. Либо измените свойство на false, либо ко всем параметрам добавляйте еще один - случайное число. Например:
Код AS3:
private function sndRequest():void {
		variables = new URLVariables();
		variables.id = id;
 
		request = new URLRequest();
		request.url = serverUrl;
		request.method = URLRequestMethod.GET;
                variables.random = new Date().getTime(); // случайный параметр на время отладки
		request.data = variables;
 
		loader = new URLLoader();
		loader.addEventListener(Event.COMPLETE, rcv_hello);
		loader.load(request);	
	}
Подробнее здесь
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/

Старый 21.03.2011, 21:53
nka1024 вне форума Посмотреть профиль Отправить личное сообщение для nka1024 Найти все сообщения от nka1024
  № 5  
Ответить с цитированием
nka1024

Регистрация: Mar 2011
Сообщений: 5
спасибо, действительно кэш. URLRequest.cacheResponse только для air, так что взял решение с рандомной переменной. к слову, POST ответы не кэшируются, так что можно обойтись и без переменной.

Старый 22.03.2011, 08:54
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 6  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
Цитата:
sql_a.sendRequest();
и
Цитата:
private function sndRequest():void
о_О как оно вообще работает? )
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 22.03.2011, 10:57
nka1024 вне форума Посмотреть профиль Отправить личное сообщение для nka1024 Найти все сообщения от nka1024
  № 7  
Ответить с цитированием
nka1024

Регистрация: Mar 2011
Сообщений: 5
Цитата:
Сообщение от cleptoman Посмотреть сообщение
и

о_О как оно вообще работает? )
решил весь класс не копипастить, видать опечатался при обрезании

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
urlloader
Опции темы
Опции просмотра

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

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


 


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


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