Quiero cargar imágenes externas en mi página de forma asíncrona usando jQuery y he intentado lo siguiente:
$.ajax({
url: "http://somedomain.com/image.jpg",
timeout:5000,
success: function() {
},
error: function(r,x) {
}
});
Pero siempre devuelve un error, ¿es posible cargar una imagen como esta?
Traté de usar el .load
método y funciona, pero no tengo idea de cómo puedo configurar el tiempo de espera si la imagen no está disponible (404). ¿Cómo puedo hacer esto?
Respuestas:
No hay necesidad de ajax. Puede crear un nuevo elemento de imagen, establecer su atributo de origen y colocarlo en algún lugar del documento una vez que haya terminado de cargarse:
fuente
paint
ulayout
operaciones, y ciertamente retrasando cualquieronload
dependencia de eventos.SI REALMENTE NECESITA USAR AJAX ...
Encontré casos de uso donde los manipuladores de carga no eran la elección correcta. En mi caso cuando imprimo vía javascript. Entonces, en realidad, hay dos opciones para usar el estilo AJAX para esto:
Solución 1
Utilice datos de imagen Base64 y un servicio de imagen REST. Si tiene su propio servicio web, puede agregar un script JSP / PHP REST que ofrezca imágenes en codificación Base64. Ahora, ¿cómo es eso útil? Encontré una sintaxis nueva y genial para la codificación de imágenes:
Por lo tanto, puede cargar los datos de la imagen Base64 usando Ajax y luego, al finalizar, construye la cadena de datos Base64 en la imagen. Gran diversión :). Recomiendo usar este sitio http://www.freeformatter.com/base64-encoder.html para la codificación de imágenes.
Solución2:
Engaña al navegador para usar su caché. Esto le da un buen fadeIn () cuando el recurso está en la memoria caché del navegador:
Sin embargo, ambos métodos tienen sus inconvenientes: el primero solo funciona en los navegadores modernos. El segundo tiene fallas de rendimiento y se basa en la suposición de cómo se usará el caché.
aplausos
fuente
Con jQuery, simplemente puede cambiar el atributo "src" a "data-src". La imagen no se cargará. Pero la ubicación se almacena con la etiqueta. Que me gusta
Una pieza simple de jQuery copia data-src a src, que comenzará a cargar la imagen cuando la necesite. En mi caso cuando la página ha terminado de cargarse.
Apuesto a que el código jQuery podría abreviarse, pero es comprensible de esta manera.
fuente
data-
etiquetas, es una feria poco más fácil el acceso a ellos a través de$(element).data('src')
lugar de$(element).attr('data-src')
Debería ser mejor que ajax porque si es una galería y estás recorriendo una lista de fotos, si la imagen ya está en caché, no enviará otra solicitud al servidor. Solicitará en el caso de jQuery / ajax y devolverá un HTTP 304 (No modificado) y luego usará la imagen original del caché si ya está allí. El método anterior reduce una solicitud vacía al servidor después del primer bucle de imágenes en la galería.
fuente
Puede utilizar objetos diferidos para cargar ASYNC.
Por favor, preste atención: image.onload debe estar antes de image.src para evitar problemas con el caché.
fuente
Si solo desea establecer la fuente de la imagen, puede usar esto.
fuente
Esto también funciona ...
fuente
AFAIK tendrías que hacer una función .load () aquí como se aplica a .ajax (), pero puedes usar jQuery setTimeout para mantenerlo activo (ish)
fuente
use .load para cargar su imagen. para probar si obtiene un error (digamos 404) puede hacer lo siguiente:
cuidado: el evento .error () no se activará cuando el atributo src esté vacío para una imagen.
fuente
$ (function () {
fuente