Hallo,
var bild = new Image();
bild.src = "sql.php" + p;
delete bild;Das wird knapp. Das Laden der HTTP-Ressource nach Änderung von bild.src wird im Hintergrund ausgeführt. Wenn man direkt im Anschluss delete bild durchführt, könnte das möglicherweise unschöne Resultate haben.
In welcher Form?
Der Browser könnte, sofern die Anfrage zum Server noch nicht gesendet wurde, die Anfrage gar nicht senden.
Ist aber nur eine allgemeine Befürchtung.
"Unschön" hört sich so nach Browserabsturz an, was ich aber mit Firefox und dem IE 6 in Verbindung mit einem mit zehnsekündiger Verzögerung antwortenden Test-"Bild" (Skript) nicht nachvollziehen konnte.
Wann der Server antwortet, ist eigentlich irrelevant. Hauptsache, die Anfrage dringt zum Server durch.
Allerdings könnte der Browser die TCP-Verbindung schließen, wenn man das Objekt, für das momentan eine Anfrage läuft, gelöscht wird. Soweit ich weiß, schießt z.B. der PHP-Interpreter laufende PHP-Scripte ab, sobald das geschieht (Quelle).
Funktionierte im Gegenteil einwandfrei wie beschrieben
Wie gesagt, war nur eine Vermutung. Ich würde das Objekt erst nach dem fertigen Laden freigeben, auch wenn ich keine Tests durchgeführt habe, die die praktische Nachteiligkeit deiner Methode belegen.
Ich denke auch, dass das eine oder andere Vorladen von Grafiken dann ebenfalls "unschön" enden müsste, auch wenn dort die Grafikobjekte statt mit delete mit dem Wechsel zu einer neuen Seite abgewürgt werden.
Vorladescripte wechseln deshalb i.d.R. auch erst die Seite, wenn für alle vorgeladenen Grafiken load-Events gefeuert wurden bzw. die complete-Eigenschaft stimmt.
Nichtsdestotrotz kann man natürlich die delete-Zeile und das Wörtchen var rausnehmen, dann bleibt das Objekt wenigstens bis zur nächsten Änderung stehen.
var kann man ruhig verwenden.
Ein Objekt bleibt m.W. weiterhin im Speicher, auch wenn es in einer lokalen Funktion definiert wurde, die bereits abgelaufen ist. Das Abräumen besorgt erst der Garbage Collector, der m.W. nicht (notwendigerweise) direkt nach Ausführen der Funktion anspringt.
Mathias