-
URLLoader works only in one instance of the class
hi, i made a class for connection with php-script, which handles sql-requests. it sends requests via URLLoader(), here is simplified code:
Actionscript Code:
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)); } }
it works fine, but when i create 2 instances of the class and call sndRequest() for each instance, URLLoader() sends only one request, but COMPLETE event triggers 2 times, so i get 2 trace(sid).
here is example of using instances. second instance created after triggering COMPELETE event in first URLLoader, but it still sends only one request
Actionscript Code:
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); } }
i'm new to as3, so i can't get why it happens. how can i make it work?
-
found an answer on russian forum. it happens because responses being cached. solved by using random variable in GET-request. also can be solved by switching to POST method or setting URLRequest.cacheResponse to false
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|