Problem mit Array aus LoadVars

pixelmord

Mitglied
Hi,

ich stecke hier fest mit einem Array das ich per LoadVars aus PHP lade. Ich hoffe Ihr könnt mir helfen, ich seh den Wald vor Bäumen nicht.
Hier der AS-Code im ersten Bild von _root:
Code:
var slides:Array = Array();
this.error = "";
var my_mcl:MovieClipLoader = new MovieClipLoader();
var result_lv:LoadVars = new LoadVars();
var send_lv:LoadVars = new LoadVars();
result_lv.onLoad = function(success:Boolean) {
	if (success) {
		slide_ar = result_lv.slidesfound;
                slides  = result_lv.slidesfound; // das wird anscheinend nicht übergeben?!
		error = "";
		for(i = 0; i < slide_ar.length; i++){
			var mc_name:String = "slide" + i;
			trace(mc_name); // trace o.k., liefert slide01, slide02,.....
			trace(slide_ar[i]); // trace leider undefined 
			var filepath:String = "slides/" + slide_ar[i];
			var mc:MovieClip = _root.container.createEmptyMovieClip(mc_name, this.getNextHighestDepth());
			my_mcl.loadClip(filepath, mc); //schlägt fehl wg. filenotfound - klar s.o.

		}
	} else {
		error = "Error connecting to server.";
	}
};
send_lv.read_dir = "./slides/";
send_lv.sendAndLoad("http://localhost/dev/FlashSlide/readDir.php", result_lv, "POST");
trace(slides.length); // liefert 0 - blöderweise

Das PHP-Script sieht so aus:
PHP:
<?php
$read_dir = $HTTP_POST_VARS["read_dir"];

if($handle=opendir($read_dir)){
	while (false !==($file = readdir($handle))) {
	   if(!is_dir($file) && !is_link($file)) {
	   	 $ar_filesfound []= $file;
	   }
	}

}
echo "&slidesfound=".$ar_filesfound;
?>

Eigentlich wollte ich ja die ganze Sache mit dem Erstellen der leeren MCs und Laden der Bilder(Verzeichnis "slides" enthält lauter Bilder) auch gar nicht in dem onLoad-Aufruf des LoadVars-Objekts machen aber ich habs auch nicht geschafft die Variable slides mit result_lv.slidesfound zu füllen.

Für Eure Hilfe bin ich wie immer sehr dankbar!

Gruß
 
Hi,

Du hast mehrere Denkfehler:

1. Dein PHP-Script wird im besten Fall etwas in dieser Art zurückgeben:
Code:
&slidesfound=Array
Damit hast Du im LoadVars-Objekt eine Variable "slidesfound" mit dem Wert "Array" und keinesfalls ein Array-Objekt. Schau noch einmal in die Referenz, was das LoadVars-Objekt für Daten erwartet (url-kodierte Variablen-Wert-Paare). Um ein Array mit den Datennamen an Flash zu übergeben, musst Du das Array serverseitig serialisieren, so dass z.B. etwas in dieser Art ausgegeben wird:
Code:
file1=bilder/bild1.jpg&file2=bilder/bild2.jpg&file3=bilder/bild3.jpg
In Deinem Fall wäre es fast einfacher, Du würdest statt dem LoadVars- das XML-Objekt verwenden und php-seitig einen entsprechenden Baum zusammensetzen:
Code:
<img src="bilder/bild1.jpg />
<img src="bilder/bild2.jpg />
<img src="bilder/bild3.jpg />

2. Die LoadVars- und XML-Objekte arbeiten asynchron, daher wird folgendes:
Code:
send_lv.sendAndLoad("http://localhost/dev/FlashSlide/readDir.php", result_lv, "POST");
trace(slides.length);
nie funktionieren: Die Zeile nach der sendAndLoad-Aktion wird sofort verarbeitet, die Daten allerdings erst geparst, wenn Deine onLoad-Funktion aufgerufen wird, was ggf. erst einige Zeit später der Fall ist. ;) Weitergehende Datenverarbeitung sollte daher immer von der onLoad-Funktion aus angestoßen werden.

Gruß
.
 
Vielen Dank,

zu 1.
das hab ich eben auch gelesen, irgendwie komm ich mit der Flash-Dokumentation nicht so gut zurecht. Das funktioniert jetzt gut mit einem serialisierten string, den ich nachher in Flash splitte.
Geilerweise hat Flash bei der vorherigen Version aber immer die richtige Length des Arrays im Trace ausgegeben, deshalb war ich auch so lange auf dem Holzweg!

zu 2.
Das erste Problem hat wohl mein Hirn soweit aufgeweicht, daß ich daran gar nicht mehr gedacht hab. Weil das hatte ich hier schon mal gelesen.

Vielen lieben Dank für die Hilfe!
 
Zurück