file_exists() in Flash

dsturm

Erfahrenes Mitglied
Hallo Leute,

bin dabei mir eine simple Funktion zum Überprüfen auf Vorhandenheit von Dateien zu schreiben, leider hakt es noch:

PHP:
_global.is_file = function(file)
{
	_global.check_stat = undefined;
	file_check = new LoadVars();
	file_check.onLoad = function(success)
	{
		_global.check_stat = success;
	}
	file_check.load(file);
	return check_stat;
}

Wenn ich mir innerhalb der onLoad-Funktion den Bool ausgebe, werden bei mir alle Testdateien richtig erkannt, ausserhalb, also durch Aufruf der is_file() wird nichts zurückgegeben. Woran könnte es liegen?
 
Hallo,

1. Wenn du (was ich unnötig finde) den boolschen Wert schon in einer globalen Variable speicherst, dann musst du den auch so zurückgeben.

EDIT: Hab grad nen brutalen Quatsch (Punkt 2) gepostet. Ich arbeite dran ;)

gruss
 
Zuletzt bearbeitet:
Naja, unnötig habe ich auch erst gedacht... Hatte auch zuerst:

PHP:
_global.is_file = function(file)
{
    file_check = new LoadVars();
    file_check.onLoad = function(success)
    {
        return success;
    }
    file_check.load(file);
}

Nur da es dann nicht funktioniert hatte, nahm ich an, dass der Rückgabewert von onLoad nicht der Rückgabewert der Funktion is_file() ist...
 
Hallo,

das ist so, der return gilt dann für die onLoad-Funktion. Wenn du ausserdem gleich nach dem Ladebefehl die Kontroll-Variable zurückgibst, die unter Umständen gar noch nicht gesetzt ist, weil der Ladevorgang noch nicht ausgewertet wurde, bekommst du (praktisch) immer undefined. Du musst also irgendwie noch überprüfen, ob die Kontrollvariable gesetzt wurde, sei das nun auf false oder true. Erst dann darfst du sie auch zurückgeben.

gruss
 
Hallo,

na da gibt es verschiedene Möglichkeiten. Wenn du der Funktion z.B. als weiteren Parameter noch einen MovieClip mitgibst, dann könntest du mit einem onEnterFrame-Loop die Variable "file_check" überprüfen, dazu kommt, dass du eben diese Variable nicht im _global-Objekt speichern müsstest. Auch ne Möglichkeit wäre dann die Überprüfung mit einem Intervall. Das nächste Problem wäre aber schon vorprogrammiert:
Wenn du nachher einen File-Check nach dem Muster

PHP:
if (is_file("test.txt", this)) {
     //Anweisung
}
durchführen willst, wird oben beschriebener Code mit 99-pronzentiger Wahrscheinlichkeit schon abgearbeitet sein, wenn der File-Check abgeschlossen ist und der return ausgeführt wird, das würde zu einer weiteren Überprüfung führen und das dünkt mich sehr aufwendig. Event-Prozeduren wie z.B. onLoad sind ja eigentlich genau dazu bestimmt, trotz der asymmetrischen Funktionsweise von Flash eine zeitlich exakte Reaktion auf gewisse Ereignisse zu garantieren.
Ich würd mir also gut überlege, ob du an deinem Konzept festhalten willst.

gruss

EDIT: sagte ich asymmetrisch? :) asynchron
 
Zuletzt bearbeitet:
Mein Vorschlag: Übergib der file_check-Funktion einfach zusätzlich eine Referenz auf eine Callback-Funktion:
Code:
function file_check(_file, _callback) {
  var lv = new LoadVars();
  lv.onLoad = function(suc) {
    _callback(suc);
  }
  lv.load(_file);
}
Das ernöglicht Dir zwar auch keinen synchronen Aufruf, kann aber u.U. praktischer sein:
Code:
function onChecked(s) {
    trace("Dateistatus: " + (s)? "vorhanden" : "nicht vorhanden");
}

file_check("test.txt", onChecked);

Gruß
.
 
Zurück