|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2011
Сообщений: 5
|
URLLoader работает только в одном экземпляре класса
Приветствую
я написал класс для взаимодействия с php-скриптом, который обрабатывает запросы к mysql. запросы отправляю через URLLoader, вот обрезанный пример класса: 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)); } } вот пример создания экземпляров: 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); } } |
|
|||||
Регистрация: Jan 2011
Сообщений: 46
|
У тебя ошибка в методе sndRequest()
надо variables.id = _id; |
|
|||||
Регистрация: Mar 2011
Сообщений: 5
|
|
|
|||||
Регистрация: May 2010
Сообщений: 543
|
Внимательно код не изучал, но если верить словам, что срабатывает событие COMPLETE 2 раза, могу сказать следующее:
оба запроса посылаются на один url с одинаковыми параметрами? URLRequest по умолчанию кэширует ответ сервера, потому как свойство URLRequest.cacheResponse по умолчанию true. Либо измените свойство на false, либо ко всем параметрам добавляйте еще один - случайное число. Например: 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/ |
|
|||||
Регистрация: Mar 2011
Сообщений: 5
|
спасибо, действительно кэш. URLRequest.cacheResponse только для air, так что взял решение с рандомной переменной. к слову, POST ответы не кэшируются, так что можно обойтись и без переменной.
|
|
|||||
Цитата:
Цитата:
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
Регистрация: Mar 2011
Сообщений: 5
|
решил весь класс не копипастить, видать опечатался при обрезании
|
Часовой пояс GMT +4, время: 17:31. |
|
« Предыдущая тема | Следующая тема » |
Теги |
urlloader |
Опции темы | |
Опции просмотра | |
|
|