Sven Rautenberg: Javascript läuft beim Debuging mit Firebug anders als ohne

Beitrag lesen

Moin!

Mal so ganz grundsätzlich zu deinem Code-Erscheinungsbild:

1. Zu viele Leerzeilen! Code geht von Haus aus schon in die Länge, überflüssige Leerzeilen sorgen nur für unnötiges Scrollen.
2. Setze die geschweiften Klammern in Javascript immer an das ENDE der Zeile, nicht nach einem Return in eine neue Zeile. Spart dir die verzweifelte Suche nach Fehlern, weil Javascript fehlende Semikolons am Befehlsende ergänzen kann.
3. Die Einrückung habe ich auch schon konsequenter gesehen.

Und für alles das ist "Ich bin grad am Fehlersuchen, hauptsache es läuft erstmal" keine gute Ausrede.

Zu deinem Problem: Du hast ein Zeitproblem.

Du startest einen Ajax-Request, der aber eine gewisse Zeit zur Abarbeitung benötigt, erwartest aber das Ergebnis sofort. So, wie du dein Skript organisiert hast, wird das aber nie funktionieren können.

Abgesehen davon macht dein PHP-Skript nichts, was man auch mit Ajax direkt beim Server abfragen könnte, denn die Bilder sind ja als HTTP-Ressource verfügbar - oder eben auch nicht. Man kann also anstatt des Aufrufs des PHP-Skripts auch direkt einen HEAD-Request auf die tatsächliche Bild-URL machen und kriegt vom Server dann entweder Status 200 zurück, oder einen Fehlerstatus (404 z.B.).

Da du aber ohnehin die Bilder direkt danach auf der Seite anzeigen willst, kann man sich das ganze Ajax-Abfragen auch insgesamt sparen, und stattdessen ganz klassisch eine Bild-Ressource im Browser erzeugen, dann genauso abwarten, bis die geladen wurde, und beim Lade-Erfolg hat der Browser das Bild dann schon im Cache.

Oder noch viel verrückter: Das PHP-Skript erzeugt schon direkt beim Seitenaufruf eine Liste der ihm bekannten Bilder dieser Anzeige-Sequenz und schreibt eine solche Liste für Javascript erreichbar in einen <script>-Bereich in eine Variable (in PHP eignet sich json_encode() perfekt für den Export von Variablen in gültigen Javascript-Variablendefinitions-Code.

Genau DANN hättest du erst die Möglichkeit, in den bestehenden Funktionen ohne viel Aufwand und insbesondere ohne Ladeverzögerung sofort zu wissen, ob ein Bild existiert, oder nicht. Die Funktion BildExists() würde dann in der Liste nachgucken und sofort true/false zurückgeben können, und müsste nicht einen Callback erzeugen, der erst nach dem erfolgreichen Abarbeiten des Ajax-Requests aufgerufen würde.

- Sven Rautenberg