Werken met externe data
ActionScript 3.0 geeft de mogelijkheid om data te laden van externe bronnen. Deze bronnen kunnen statisch zijn zoals tekstbestanden, of dynamisch middels webscripts (b.v. php) die data uit een database halen. De data kan op allerlei manieren formateerd zijn, ActionScript voorziet in de functionaliteit deze te decoderen en toegangkelijk te maken. Als onderdeel van het inlees proces kun je ook data naar een externe server zenden.
URLLoader en URLRequest
AS3 gebruikt de URLLoader en de URLRequest classes voor het laden van externe data. De URLLoader class download de data van een URL als tekst, binaire data, of URL-encoded variables. De URLLoader class is handig for het downloading van tekstbestanden, XML bestanden, of andere informatie die gebruikt moet worden in data-gestuurde Flash applicaties. Deze class maakt gebruik van het event-handling model van AS3, dit stelt je in staat events te gebruiken zoals 'complete', 'httpStatus', 'ioError', 'open', 'progress' en 'securityError'.
De data van de URLLoader URL is niet beschikbaar totdat de totale download is afgerond. Als het bestand met succes geladen is, zal het 'flash.events.Event.COMPLETE' event een feit zijn. De geladen data is dan gedecodeert naar een string.
De methode URLLoader.load() vraagt om een enkele parameter. Deze URLRequest instance bevat alle informatie voor een enkele HTTP request, zoals in ieder geval de URL zelf, maar ook eventueel de request methode (GET of POST), toegevoegde header informatie en de MIME typering (b.v. als je XML content wilt uploaden).
var wat:URLRequest = new URLRequest("tekstje.txt");
var doos:URLLoader = new URLLoader();
function klaar(event:Event){
tekstveld.text = event.target.data
}
doos.load(wat);
doos.addEventListener(Event.COMPLETE, klaar);
Het laden van externe documenten
Als met AS3 dynamische applicaties wilt bouwen, is het een goed idee om de data uit een extern bestand te halen of binnen te halen via een server-side script.
Zo kun je bouwen zonder de heletijd je script aan te passen of nieuwe swf bestanden te maken. Je kunt b.v. een 'Tip van de dag' applicatie maken. Je maakt hiervoor een server-side script dat een random tip uit een database haalt en dit wegschrijft als een tekst bestand. De AS applicatie laad dan gewoon statische informatie in tegenstelling tot iedere keer de database te raadplegen.
Het volgende stukje code creeert een URLRequest en een URLLoader object, deze laad de inhoud van een extern tekst bestand, tekstje.txt:
var wat:URLRequest = new URLRequest("tekstje.txt");
var doos:URLLoader = new URLLoader();
doos.load(wat);
Je kunt het stukje code als volgt versimpelen :
var doos:URLLoader = new URLLoader(new URLRequest("tekstje.txt"));
Wanneer je geen methode aangeeft, gebruikt Flash de HTTP GET methode. Als je data wilt sturen met POST dan moet je dat aangeven zoals bv. hieronder:
var wat:URLRequest = new URLRequest("script.php"); wat.method = URLRequestMethod.POST;
Je kunt de inhoud van het externe bestand ook, middels properties van de URLLoader, gebruiken binnen andere objecten. De 3 mogelijkheden zijn:
- URLLoaderDataFormat.TEXT // Deze URLLoader.data propertie voor gebruik in een String object. (Default)
- URLLoaderDataFormat.BINARY // Deze URLLoader.data propertie voor binair gebruik in een ByteArray object.
- URLLoaderDataFormat.VARIABLES // Deze URLLoader.data propertie voor het opslaan van URL-encoded variables in een URLVariables object.
Nu nog even een voorbeeld waar alles in terug komt:
var tekstveld:TextField = new TextField();
var wat:URLRequest = new URLRequest("tekstje.txt");
var doos:URLLoader = new URLLoader();
var stijl:TextFormat = new TextFormat(); wat.method = URLRequestMethod.GET; //default keuze, dus niet echt nodig doos.data = URLLoaderDataFormat.TEXT; //default keuze
doos.load(wat);
stijl.font = "Verdana";
stijl.color = 0x00FF00;
tekstveld.width = 200;
tekstveld.height = 200; addChild(tekstveld);
function klaar(event:Event){
tekstveld.text = event.target.data
tekstveld.setTextFormat(stijl);
}
doos.addEventListener(Event.COMPLETE, klaar);