¿Es posible volver a cargar una imagen con un nombre de archivo idéntico desde un servidor usando jQuery?
Por ejemplo, tengo una imagen en una página, sin embargo, la imagen física puede cambiar según las acciones del usuario. Tenga en cuenta que esto no significa que el nombre del archivo cambie, sino el archivo en sí.
es decir:
- El usuario ve la imagen en la página predeterminada
- El usuario sube una nueva imagen
- La imagen predeterminada en la página no cambia (supongo que esto se debe a que el nombre del archivo es idéntico, el navegador usa la versión en caché)
Independientemente de la frecuencia con que se llame el siguiente código, el mismo problema persiste.
$("#myimg").attr("src", "/myimg.jpg");
En la documentación de jQuery, la función "cargar" sería perfecta si tuviera un método predeterminado para activar el evento en lugar de vincular una función de devolución de llamada a una carga exitosa / completa de un elemento.
Cualquier ayuda es muy apreciada.
Respuestas:
Parece que es tu navegador almacenando en caché la imagen (que ahora noto que escribiste en tu pregunta). Puede forzar al navegador a recargar la imagen pasando una variable adicional como esta:
fuente
random
, y no debe siempre conDate
menos que seas muy, muy rápido. ; ^) Obtener una cita en el cliente no requiere muchos recursos, y puede reutilizar tantas imágenes como necesite de una vez, así que continúe con el paso 4. Beneficio.Probablemente no sea la mejor manera, pero he resuelto este problema en el pasado simplemente agregando una marca de tiempo a la URL de la imagen usando JavaScript:
La próxima vez que se carga, la marca de tiempo se establece en la hora actual y la URL es diferente, por lo que el navegador realiza una OBTENCIÓN de la imagen en lugar de utilizar la versión en caché.
fuente
imagename.jpg?t=1234567&q=.jpg
oimagename.jpg#t1234567.jpg
Este podría ser uno de los dos problemas que mencionas.
Para ser sincero, creo que es el número dos. Sería mucho más fácil si pudiéramos ver más jQuery. Pero para empezar, intente eliminar el atributo primero y luego configúrelo nuevamente. Solo para ver si eso ayuda:
Incluso si esto funciona, publique un código ya que esto no es óptimo, imo :-)
fuente
con una línea sin preocuparse por codificar la imagen src en javascript (gracias a jeerose por las ideas:
fuente
Para evitar el almacenamiento en caché y evitar agregar marcas de tiempo infinitas a la URL de la imagen, elimine la marca de tiempo anterior antes de agregar una nueva, así es como lo hice.
fuente
¡Esto funciona muy bien! sin embargo, si vuelve a cargar el src varias veces, la marca de tiempo también se concatena con la url. He modificado la respuesta aceptada para lidiar con eso.
fuente
¿Has intentado restablecer el html de contenedores de imágenes? Por supuesto, si es el navegador el que está almacenando en caché, entonces esto no ayudaría.
fuente
Algunas veces en realidad una solución como -
tampoco actualizar src correctamente, prueba esto, funcionó para mí ->
fuente
Usar "#" como delimitador puede ser útil
Mis imágenes se guardan en una carpeta "oculta" encima de "www" para que solo los usuarios registrados tengan acceso a ellas. Por esta razón, no puedo usar lo ordinario,
<img src=/somefolder/1023.jpg>
pero envío solicitudes al servidor como<img src=?1023>
y responde respondiendo enviando la imagen guardada con el nombre '1023'.La aplicación se utiliza para recortar imágenes, por lo que después de una solicitud ajax para recortar la imagen, se cambia como contenido en el servidor pero mantiene su nombre original. Para ver el resultado del recorte, una vez completada la solicitud ajax, la primera imagen se elimina del DOM y se inserta una nueva imagen con el mismo nombre
<img src=?1023>
.Para evitar el cobro agrego a la solicitud de la etiqueta de "tiempo" precedidas por "#" por lo que se convierte
<img src=?1023#1467294764124>
. El servidor filtra automáticamente la parte hash de la solicitud y responde correctamente enviando mi imagen guardada como '1023'. Por lo tanto, siempre obtengo la última versión de la imagen sin mucha decodificación del lado del servidor.fuente
Puede que tenga que volver a cargar la fuente de la imagen varias veces. Encontré una solución con Lodash que me funciona bien:
Una marca de tiempo existente se truncará y se reemplazará por una nueva.
fuente
Basado en la respuesta de @kasper Taeymans.
Si simplemente necesita recargar la imagen (no reemplazar su src con algo nuevo), intente:
fuente
}
fuente