2010-09-24 10 views
7

Quiero crear un sitio web que cargue una imagen mediante XMLHttpRequest(). (XMLHttpRequest porque quiero representar al usuario una progressbar%)XMLHttpRequest JS Image loading

Mi Código:

var req = new XMLHttpRequest(); 

req.addEventListener("progress", onUpdateProgress, false); 
req.addEventListener("load", onTransferComplete, false); 
req.addEventListener("error", onTransferFailed, false); 
req.addEventListener("abort", onTransferFailed, false); 

req.open("GET", "image.png", true); 
req.send(); 

function onUpdateProgress(e) { 
if (e.lengthComputable) { 
var percent_complete = e.loaded/e.total; 
if (Math.round(percent_complete*200)>=20) { 
        $("#progress").animate({ 
        width: Math.round(percent_complete*100) 
      }, 0); 
     } 
     } 
} 

function onTransferFailed(e) { 
    alert("Something went wrong. Please try again."); 
} 

function onTransferComplete(e) { 
    //Problem 
} 

Mi problema es que no sé cómo mostrar la imagen que ahora se carga. Espero que alguien me pueda ayudar :) Gracias ...

+0

+1 buena pregunta! Obtengo una imagen binaria y no sé cómo mostrar la imagen – Topera

Respuesta

2

Puede hacerlo usando URI de DATOS, pero es difícil hacerlo funcionar en todos los navegadores actuales.

Si las opciones de caché están configuradas correctamente, puede cargarlas mejor dos veces: primero usando su solicitud AJAX, luego, después de que el navegador haya guardado la imagen, otra vez usando las funciones de imagen habituales. La segunda vez su imagen no será recuperada del servidor nuevamente, pero el navegador usará el archivo en caché y mostrará la imagen casi al instante.

+0

Esto parece funcionar. Pero es difícil ver si el navegador realmente en voz alta la imagen solo una vez. El Safari WebInspector, por ejemplo, lo muestra dos veces: electance.com/share/Web%20Inspector.png – tobi

+0

@tobias - ¿Son correctas las configuraciones de su servidor? ¿Puedes mostrar los encabezados con los que se envía la imagen? –

+0

Creo que sí. Aquí está el sitio de prueba: electerious.com/share/loading.html – tobi