PHP-Array in Flash laden

Veränderung

Erfahrenes Mitglied
Es gibt zu meinem Problem zwar Forenthemen, aber keine für mich brauchbare Antwort.

Ich habe eine SQL-Tabelle, die in einem PHP-File ausgegeben wird. Ich habe es mit normalen array[int]-Variablen versucht, später dann auch primitiver mit Variablennamen wie variable_nr.
Leider kann ich diese nicht auslesen. Ich durchlaufe in Flash in einer For-Schleife den Versuch, die Variablen darzustellen.
Code:
for(i=0;i<=35;i++) {
 trace(array[i); // klappt nicht
 trace(array["i"]); // klappt nicht
}
Die Schleife selbst geht natürlich, nur die Werte weisen auf 'undefined'. Wie lese ich dann Arrays aus oder welche andere Lösung könnte ich verwenden?
Wie kann man eine Variable in eine Variable in Flash tun? Sowie hier:
PHP:
$titel="name";
$$titel="Klaus";
 
... die Frage bezog sich eher auf das Einladen in Flash: LoadVars-Objekt?

In einem url-enkodierten String kannst Du m.E. keine Indizes für Arrays vergeben (natürlich könntest Du die Variablen einfach fortlaufend bennennen).

Bei einem kompletten Array würde ich allerdings das XML-Objekt empfehlen:
PHP:
$ostr = '<array>';
foreach ($titel as $key=>$val) {
    $ostr.= '<item key="'.$key.'" val="'.$val.'" />';
}
$ostr.= '</array>';
echo $ostr;
Code:
// Einlesen in Flash:
var titel = new Array();
var xm = new XML();
xm.ignoreWhite = true;

xm.onLoad = function() {
    parse(this.firstChild.childNodes);
}

xm.load("meinscript.php");

function parse(obj) {
    for (var i=0; i<obj.length; i++) [
        var k = obj[i].attributes.key;
        var v = obj[i].attributes.val;
        titel[k] = v;
    }
}

Auf diese Weise lässt sich auch ein assoziatives Array übertragen.

Gruß
.
 
Vielen Dank, das klingt schonmal ganz gut.

Gegeben ist nun:
HTML:
<array><item key="0" val="Der+Schleifer+von+BB+6+%2F+Drill+Instructor" /><item key="1" val="Challenge+von+Ginny+und+Danni" /></array>
Interpretation:
Code:
	var titel = new Array();
	var xm = new XML();
	xm.ignoreWhite = true;
	xm.onLoad = function() {
		parse(this.firstChild.childNodes);
	};
	xm.load("url..."); // URL ist wirklich vorhanden, in Variable gespeichert
	function parse(obj) {
		for (var i = 0; i<obj.length; i++) {
			var k = obj[i].attributes.key;
			var v = obj[i].attributes.val;
			titel[k] = v;
			trace("Wert: "+v); // Warum gibt er den Wert nicht aus? Auch 'Wert: ' unterschlägt er, offensichtlich wird die Schleife nicht mal durchlaufen.
		}
	}
	parse(xm); // Muss die Funktion so aufgerufen werden?
	trace(titel[1]); // undefined
Fragen siehe Quellcode.
Danke für jede Antwort!
 
Hi,

Warum gibt er den Wert nicht aus? Auch 'Wert: ' unterschlägt er, offensichtlich wird die Schleife nicht mal durchlaufen
--> Scheint so. Ich hab das ganze auch nur aus dem Kopf getippt und nicht getestet. Lass Dir mal zu Beginn der Funktion "parse" den Inhalt der Variable "obj" tracen und sag mir, was ausgegeben wird.

Muss die Funktion so aufgerufen werden?
--> Nein, keinesfalls und auch nicht an dieser Stelle! Die Funktion wird aus der xm.onLoad-Funktion heraus aufgerufen: Es macht ja auch erst Sinn, wenn die Datei geladen ist. Zudem wird der Funktion "parse" nicht das ganze XML-Objekt übergeben, sondern nur die inneren Knoten des Arrays.

trace(titel[1]); // undefined
--> Klar, an dieser Stelle ist auch noch nichts geladen! AS arbeitet Ereignisorientiert, erst wenn die Funktion parse aufgerufen wird, stehen die Daten zur Verfügung. Von da aus kannst Du dann weitere Aktionen starten, z.B. den Inhalt ausgeben.

Gruß
.
 
Meinst du so?
Code:
var titel = new Array();
var xm = new XML();
xm.ignoreWhite = true;
xm.onLoad = function() {
	parse(this.firstChild.childNodes);
};
xm.load(url);
function parse(obj) {
	trace("Inhalt: "+obj);
	for (var i = 0; i<obj.length; i++) {
		var k = obj[i].attributes.key;
		var v = obj[i].attributes.val;
		titel[k] = v;
	}
}
Es wird nichts augegeben, es findet gar kein Trace statt.
 
.. dann scheint die Funktion überhaupt nicht aufgerufen zu werden, sprich: die Datei wird nicht geladen.

Poste bitte mal Deine Datei (mit PHP-Script).

Gruß
.
 
Hi,

ok, wenn Du das ganze noch in ein <channel>-Tag packst, musst Du natürlich beim Auslesen noch einen Knoten tiefer gehen.

... mit dem Ladeproblem hat das allerdings nichts zu tun. Mit "Datei posten" meinte ich Deine .Flashdatei. ;)

Gruß
.
 

Neue Beiträge

Zurück