Wanneer u dynamische toepassingen maakt, kan het nuttig zijn om gegevens te laden uit externe bestanden of serverscripts. Hiermee kunt u dynamische toepassingen maken zonder dat u uw toepassingen moet bewerken of opnieuw compileren. Als u bijvoorbeeld een toepassing voor een 'tip van de dag' maakt, kunt u een serverscript schrijven waarmee een willekeurige tip uit een database wordt opgehaald en eenmaal per dag wordt opgeslagen in een tekstbestand. Vervolgens kan uw toepassing de inhoud van een statisch tekstbestand laden in plaats van elke keer opnieuw query's uit te voeren.
Het volgende codefragment maakt een URLRequest- en URLLoader-object dat de inhoud van een extern tekstbestand, params.txt, laadt:
var request:URLRequest = new URLRequest("params.txt");
var loader:URLLoader = new URLLoader();
loader.load(request);
Als u geen aanvraagmethode definieert, laden Flash Player en Adobe AIR de inhoud standaard met de HTTP-methode
GET
. Als u de aanvraag wilt verzenden met de methode
POST
, stelt u de eigenschap
request.method
in op
POST
met behulp van de statische constante
URLRequestMethod.POST
, zoals wordt weergegeven in de volgende code:
var request:URLRequest = new URLRequest("sendfeedback.cfm");
request.method = URLRequestMethod.POST;
Het externe document params.txt dat tijdens de runtime wordt geladen, bevat de volgende gegevens:
monthNames=January,February,March,April,May,June,July,August,September,October,November,December&dayNames=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
Het bestand bevat twee parameters:
monthNames
en
dayNames
. Elke parameter bevat een door komma’s gescheiden lijst die als tekenreeksen wordt geparseerd. U kunt deze lijst in een array splitsen met de methode
String.split()
.
Gebruik geen gereserveerde woorden of taalconstructies als variabelenamen in externe gegevensbestanden, omdat de code hierdoor moeilijker kan worden gelezen en fouten moeilijker kunnen worden opgespoord.
Zodra de gegevens zijn geladen, wordt de gebeurtenis
complete
verzonden en is de inhoud van het externe document beschikbaar voor gebruik in de eigenschap
data
van de URLLoader, zoals wordt weergegeven in de volgende code:
function completeHandler(event)
{
var loader2 = event.target;
air.trace(loader2.data);
}
Als het externe document naam-waardeparen bevat, kunt u de gegevens parseren met de klasse URLVariables door de inhoud van het geladen bestand als volgt door te geven:
private function completeHandler(event:Event):void
{
var loader2:URLLoader = URLLoader(event.target);
var variables:URLVariables = new URLVariables(loader2.data);
trace(variables.dayNames);
}
Elk naam-waardepaar uit het externe bestand wordt gemaakt als een eigenschap in het URLVariables-object. Elke eigenschap in het variabelenobject in het voorgaande codevoorbeeld wordt als een tekenreeks behandeld. Als de waarde van het naam-waardepaar een lijst met items is, kunt u de tekenreeks in een array omzetten door als volgt de methode
String.split()
op te roepen:
var dayNameArray:Array = variables.dayNames.split(",");
Als u numerieke gegevens laadt uit externe tekstbestanden, moet u de waarden omzetten in numerieke waarden door gebruik te maken van een functie op hoofdniveau, zoals
int()
,
uint()
of
Number()
.
In plaats van de inhoud van het externe bestand als tekenreeks te laden en een nieuwe object URLVariables te maken, zou u de eigenschap
URLLoader.dataFormat
kunnen instellen op een van de statische eigenschappen in de klasse URLLoaderDataFormat. De drie mogelijke waarden voor de eigenschap
URLLoader.dataFormat
zijn:
-
URLLoaderDataFormat.BINARY
: de eigenschap
URLLoader.data
bevat binaire gegevens die zijn opgeslagen in een object ByteArray.
-
URLLoaderDataFormat.TEXT
: de eigenschap
URLLoader.data
bevat tekst in een object String.
-
URLLoaderDataFormat.VARIABLES
: de eigenschap
URLLoader.data
bevat URL-gecodeerde variabelen die zijn opgeslagen in een object URLVariables.
In de volgende code ziet u hoe u gegevens die in een object URLVariables zijn opgeslagen, automatisch kunt parseren door de eigenschap
URLLoader.dataFormat
in te stellen op
URLLoaderDataFormat.VARIABLES
:
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public class URLLoaderDataFormatExample extends Sprite
{
public function URLLoaderDataFormatExample()
{
var request:URLRequest = new URLRequest("http://www.[yourdomain].com/params.txt");
var variables:URLLoader = new URLLoader();
variables.dataFormat = URLLoaderDataFormat.VARIABLES;
variables.addEventListener(Event.COMPLETE, completeHandler);
try
{
variables.load(request);
}
catch (error:Error)
{
trace("Unable to load URL: " + error);
}
}
private function completeHandler(event:Event):void
{
var loader:URLLoader = URLLoader(event.target);
trace(loader.data.dayNames);
}
}
}
Opmerking:
De standaardwaarde voor
URLLoader.dataFormat
is
URLLoaderDataFormat.TEXT
.
Het laden van XML uit een extern bestand staat gelijk aan het laden van URLVariables, zoals in het volgende voorbeeld wordt geïllustreerd. U kunt een URLRequest- en een URLLoader-instantie maken en deze gebruiken om een extern XML-document te downloaden. Wanneer het bestand volledig is gedownload, wordt de gebeurtenis
Event.COMPLETE
verzonden, waarna de inhoud van het externe bestand wordt omgezet in een XML-instantie, die u kunt parseren met XML-methoden en -eigenschappen.
package
{
import flash.display.Sprite;
import flash.errors.*;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class ExternalDocs extends Sprite
{
public function ExternalDocs()
{
var request:URLRequest = new URLRequest("http://www.[yourdomain].com/data.xml");
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
try
{
loader.load(request);
}
catch (error:ArgumentError)
{
trace("An ArgumentError has occurred.");
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}
}
private function completeHandler(event:Event):void
{
var dataXML:XML = XML(event.target.data);
trace(dataXML.toXMLString());
}
}
}