AS2 vs. AS3 oder LoadVars vs. URLLoader

LoadVars_vs_URLLoader

Zu dem Thema ein Beispiel: Man möchte einfach mal ein paar Stringwerte aus einem (Text-)Dokument laden.

In Actionscript 2:

Textdokument: ‚text.txt‘:
&var1=Text1,Text2,Text3

var sender_lv:LoadVars = new LoadVars();
sender_lv.sendAndLoad("text.txt",sender_lv,"POST");
sender_lv.onLoad = function() {
var myArray:Array = new Array();
myArray = sender_lv.var1.split(",");
trace(myArray[0]);
trace(myArray[1]);
//...
}

In Actionscript 3:

Textdokument: ‚text.txt‘
var1=Text1,Text2,Text3

var myRequest:URLRequest = new URLRequest("text.txt");
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, dataLoaded);
loader.load(myRequest);

function dataLoaded(e:Event):void {
var myArray = new Array();
var myReturnString:String = e.currentTarget.data.var1;
myArray = myReturnString.split(",");
trace(myArray[0]);
trace(myArray[1]);
// ...
}

Hervorzuheben ist bei der AS3 Variante, dass man den Wert der Eigenschaft ‚dataFormat‘ auf ‚URLLoaderDataFormat.VARIABLES‘ setzen muss. In der AS3 Version habe ich die ganzen Import-Anweisungen, die ggf. dazu kommen würden, falls man das in einer Klasse verwenden würde bewußt weg gelassen.

Wenn man in der AS3-Variante das „&“ Zeichen im Textdokument nicht entfernt, kommt folgende sehr aussagekräftige Fehlermeldung (weiß jemand, warum?) (die mich ca. 1 Stunde nach dem Fehler hat suchen lassen … *keep smiling*):

Error: Error #2101: Der an URLVariables.decode() übergebene String muss ein URL-kodierter Abfrage-String mit Name/Wert-Paaren sein.
at Error$/throwError()
at flash.net::URLVariables/decode()
at flash.net::URLVariables$iinit()
at flash.net::URLLoader/flash.net:URLLoader::onComplete()

Das die Methode ‚decode‘ offensichtlich automatisch (per Setter-Methode?!) aufgerufen wird, wenn man die ‚dataFormat‘ Eigenschaft entsprechend setzt, habe ich nach einiger Zeit dann doch schon vermutet, dass es am Text selbst liegt, da dieser nach AS3 offensichtlich nicht richtig formatiert ist, hat dann aber eine ganze Weile gedauert …

Schreibe einen Kommentar