Estoy escribiendo una aplicación web que implica un ciclo continuo de creación (y eliminación) de un buen número de imágenes en una página web. Cada imagen es generada dinámicamente por el servidor.¿Cómo puedo devolver los datos de imagen binarios de una solicitud AJAX cancelable y establecer el resultado en el src de una imagen HTML/DOM?
var img = document.createElement("img");
img.src = "http://mydomain.com/myImageServer?param=blah";
En algunos casos, algunas de estas imágenes pierden su utilidad antes de que se terminen de descargar. En ese punto, los elimino del DOM.
El problema es que el navegador continúa descargando esas imágenes incluso después de haber sido eliminadas del DOM. Eso crea un cuello de botella, ya que tengo nuevas imágenes en espera de ser descargadas, pero tienen que esperar a que las imágenes viejas innecesarias terminen de descargarse primero.
Me gustaría abortar esas innecesarias descargas de imágenes. La solución obvia parece que sea para solicitar los datos binarios de imagen a través de AJAX (ya peticiones AJAX pueden ser abortados), y establecer el img.src una vez que la descarga se ha completado:
// Code sample uses jQuery, but jQuery is not a necessity
var img = document.createElement("img");
var xhr = $.ajax({
url: "http://mydomain.com/myImageServer?param=blah",
context: img,
success: ImageLoadedCallback
});
function ImageLoadedCallback(data)
{
this.src = data;
}
function DoSomethingElse()
{
if (condition)
xhr.abort();
}
Pero el problema es que este línea no funciona de la manera que esperaba:
this.src = data;
He buscado alto y bajo. ¿No hay forma de configurar una fuente de imagen para los datos de imagen binarios enviados a través de AJAX?
Gracias por su respuesta. Desafortunadamente, necesito un soporte de navegador bastante amplio, y no estoy seguro de que funcione la codificación de base64; Necesito que estas imágenes sean lo más pequeñas posible. – Michael