A Flash Developer Resource Site

Results 1 to 2 of 2

Thread: URLLoader works only in one instance of the class

  1. #1
    Junior Member
    Join Date
    Mar 2011
    Posts
    3

    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?

  2. #2
    Junior Member
    Join Date
    Mar 2011
    Posts
    3
    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
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center