Ist es möglich, mit jQuery ein Bild mit einem identischen Dateinamen von einem Server neu zu laden?
Ich habe beispielsweise ein Bild auf einer Seite. Das physische Bild kann sich jedoch aufgrund von Benutzeraktionen ändern. Beachten Sie, dass dies nicht bedeutet, dass sich der Dateiname ändert, sondern die eigentliche Datei.
dh:
- Der Benutzer zeigt das Bild auf der Standardseite an
- Benutzer lädt neues Bild hoch
- Das Standardbild auf der Seite ändert sich nicht (ich gehe davon aus, dass der Dateiname identisch ist und der Browser die zwischengespeicherte Version verwendet).
Unabhängig davon, wie oft der folgende Code aufgerufen wird, bleibt das gleiche Problem bestehen.
$("#myimg").attr("src", "/myimg.jpg");
In der jQuery-Dokumentation wäre die Funktion "Laden" perfekt, wenn sie eine Standardmethode zum Auslösen des Ereignisses hätte, anstatt eine Rückruffunktion an ein erfolgreiches / vollständiges Laden eines Elements zu binden.
Jede Unterstützung wird sehr geschätzt.
Antworten:
Es hört sich so an, als ob Ihr Browser das Bild zwischenspeichert (was ich jetzt bemerke, dass Sie in Ihrer Frage geschrieben haben). Sie können den Browser zwingen, das Bild neu zu laden, indem Sie eine zusätzliche Variable wie folgt übergeben:
quelle
random
und sollte es nie sein, esDate
sei denn, Sie sind wirklich sehr, sehr schnell. ; ^) Das Abrufen eines Datums auf dem Client ist nicht so ressourcenintensiv, und Sie können so viele Bilder wiederverwenden, wie Sie gleichzeitig abrufen müssen. Fahren Sie daher mit Schritt 4 fort.Es ist wahrscheinlich nicht der beste Weg, aber ich habe dieses Problem in der Vergangenheit gelöst, indem ich einfach einen Zeitstempel mit JavaScript an die Bild-URL angehängt habe:
Beim nächsten Laden wird der Zeitstempel auf die aktuelle Zeit gesetzt und die URL ist unterschiedlich, sodass der Browser ein GET für das Bild ausführt, anstatt die zwischengespeicherte Version zu verwenden.
quelle
imagename.jpg?t=1234567&q=.jpg
oderimagename.jpg#t1234567.jpg
Dies könnte eines der beiden Probleme sein, die Sie selbst erwähnen.
Um ehrlich zu sein, denke ich, dass es die Nummer zwei ist. Wäre viel einfacher, wenn wir mehr jQuery sehen könnten. Versuchen Sie jedoch zunächst, das Attribut zu entfernen und dann erneut festzulegen. Nur um zu sehen, ob das hilft:
Auch wenn dies funktioniert, poste etwas Code, da dies nicht optimal ist, imo :-)
quelle
mit einer Zeile ohne Sorgen um die Hardcodierung des Bild-src in das Javascript (danke an jeerose für die Ideen:
quelle
Um das Caching zu umgehen und das Hinzufügen von unendlichen Zeitstempeln zur Bild-URL zu vermeiden, entfernen Sie den vorherigen Zeitstempel, bevor Sie einen neuen hinzufügen. So habe ich es gemacht.
quelle
Das funktioniert super! Wenn Sie den src jedoch mehrmals neu laden, wird der Zeitstempel auch mit der URL verknüpft. Ich habe die akzeptierte Antwort geändert, um damit umzugehen.
quelle
Haben Sie versucht, die HTML-Bildcontainer zurückzusetzen? Wenn der Browser zwischenspeichert, hilft dies natürlich nicht.
quelle
Manchmal tatsächlich Lösung wie -
auch src nicht richtig aktualisieren, probier das aus, es hat bei mir funktioniert ->
quelle
Die Verwendung von "#" als Trennzeichen kann hilfreich sein
Meine Bilder werden in einem "versteckten" Ordner über "www" gespeichert, sodass nur angemeldete Benutzer Zugriff auf sie haben. Aus diesem Grund kann ich das normale nicht verwenden,
<img src=/somefolder/1023.jpg>
aber ich sende Anfragen wie an den Server<img src=?1023>
und es antwortet, indem es das unter dem Namen '1023' gespeicherte Bild zurücksendet.Die Anwendung wird zum Zuschneiden von Bildern verwendet. Nach einer Ajax-Anforderung zum Zuschneiden des Bildes wird es als Inhalt auf dem Server geändert, behält jedoch seinen ursprünglichen Namen bei. Um das Ergebnis des Zuschneidens anzuzeigen, wird nach Abschluss der Ajax-Anforderung das erste Bild aus dem DOM entfernt und ein neues Bild mit demselben Namen eingefügt
<img src=?1023>
.Um ein Einlösen zu vermeiden, füge ich der Anfrage das "time" -Tag hinzu, dem "#" vorangestellt ist, damit es so wird
<img src=?1023#1467294764124>
. Der Server filtert automatisch den Hash-Teil der Anfrage heraus und antwortet korrekt, indem er mein als '1023' gespeichertes Bild zurücksendet. Somit bekomme ich immer die letzte Version des Bildes ohne viel serverseitige Dekodierung.quelle
Möglicherweise muss ich die Bildquelle mehrmals neu laden. Ich habe mit Lodash eine Lösung gefunden , die für mich gut funktioniert:
Ein vorhandener Zeitstempel wird abgeschnitten und durch einen neuen ersetzt.
quelle
Basierend auf der Antwort von @kasper Taeymans.
Wenn Sie einfach ein neues Image benötigen (ersetzen Sie es nicht durch smth new), versuchen Sie Folgendes:
quelle
}}
quelle