När du skapar dynamiska program kan det vara användbart att läsa in data från externa filer eller från skript på servern. På det sättet kan du skapa dynamiska program utan att behöva redigera eller kompilera om programmet. Om du till exempel skapar ett program för ”dagens tips” kan du skriva ett skript på servern som hämtar ett slumpmässigt tips från en databas och sparar det i en textfil en gång om dagen. Då kan programmet läsa in innehållet från en statisk textfil i stället för att varje gång skicka en begäran till databasen.
Följande kodfragment skapar ett URLRequest- och ett URLLoader-objekt, som läser in innehållet i en extern textfil med namnet params.txt:
var request:URLRequest = new URLRequest("params.txt");
var loader:URLLoader = new URLLoader();
loader.load(request);
Standardinställningen innebär, att om du inte definierar någon förfrågningsmetod, läser Flash Player och Adobe AIR in innehållet med hjälp av HTTP
GET
-metoden. Om du vill skicka begäran med hjälp av
POST
-metoden anger du
POST
för egenskapen
request.method
med hjälp av den statiska konstanten
URLRequestMethod.POST
enligt koden nedan:
var request:URLRequest = new URLRequest("sendfeedback.cfm");
request.method = URLRequestMethod.POST;
Det externa dokumentet params.txt som läses in under körningen innehåller följande data:
monthNames=January,February,March,April,May,June,July,August,September,October,November,December&dayNames=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
Filen innehåller två parametrar:
monthNames
och
dayNames
. Varje parameter innehåller en kommaavgränsad lista som analyseras som strängar. Du kan dela in listan i en array med hjälp av metoden
String.split()
.
Undvik reserverade ord eller språkkonstruktioner som variabelnamn i externa datafiler, eftersom det försvårar läsningen och felsökningen av din kod.
När data har lästs in skickas händelsen
complete
och innehållet i det externa dokumentet blir tillgängligt för användning i
data
-egenskapen för URLLoader som i följande kod:
function completeHandler(event)
{
var loader2 = event.target;
air.trace(loader2.data);
}
Om fjärrdokumentet innehåller namnvärdespar kan du analysera data med hjälp av klassen URLVariables genom att ange innehållet i den inlästa filen enligt följande:
private function completeHandler(event:Event):void
{
var loader2:URLLoader = URLLoader(event.target);
var variables:URLVariables = new URLVariables(loader2.data);
trace(variables.dayNames);
}
Varje namnvärdespar från den externa filen skapas som en egenskap i URLVariables-objektet. Varje egenskap i variabelobjektet i ovanstående kodexempel behandlas som en sträng. Om värdet i namnvärdesparet är en lista över objekt, kan du konvertera strängen till en array genom att anropa metoden
String.split()
enligt följande:
var dayNameArray:Array = variables.dayNames.split(",");
Om du läser in numeriska data från externa datafiler konverterar du värden till numeriska värden med hjälp av en högnivåfunktion, till exempel
int()
,
uint()
eller
Number()
.
I stället för att läsa in innehållet i fjärrfilen som en sträng och skapa ett nytt URLVariables-objekt, kan du ställa in egenskapen
URLLoader.dataFormat
på en av de statiska egenskaperna som finns i klassen URLLoaderDataFormat. Det finns tre möjliga värden för egenskapen
URLLoader.dataFormat
:
-
URLLoaderDataFormat.BINARY
: Egenskapen
URLLoader.data
kommer att innehålla binära data lagrade i ett ByteArray-objekt.
-
URLLoaderDataFormat.TEXT
: Egenskapen
URLLoader.data
kommer att innehålla text i ett String-objekt.
-
URLLoaderDataFormat.VARIABLES
: Egenskapen
URLLoader.data
kommer att innehålla URL-kodade variabler lagrade i ett URLVariables-objekt.
Följande kod visar hur inställning av egenskapen
URLLoader.dataFormat
på
URLLoaderDataFormat.VARIABLES
gör att du automatiskt kan analysera inlästa data till ett URLVariables-objekt:
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);
}
}
}
Obs!
Standardvärdet för
URLLoader.dataFormat
är
URLLoaderDataFormat.TEXT
.
Som nedanstående exempel visar är inläsning av XML från en extern fil detsamma som att läsa in URLVariables. Du kan skapa en URLRequest-instans och en URLLoader-instans och sedan använda dem för att ladda ned ett XML-fjärrdokument. När filen har laddats ned skickas händelsen
Event.COMPLETE
och innehållet i den externa filen konverteras till en XML-instans, som du kan analysera med hjälp av XML-metoder och -egenskaper.
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());
}
}
}