Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/01/2011, 16:42
tistklehoff
 
Fecha de Ingreso: agosto-2009
Mensajes: 67
Antigüedad: 14 años, 8 meses
Puntos: 0
[jqeruy / ajax] barra de progreso en proceso en el servidor

Hola a todos.

Tengo un proceso largo que se ejecuta en el servidor cuando un usuario pulsa un botón en la página web.

Este proceso es la creación dinámica de un pdf y termina con la descarga del mismo, lo que significa que no puedo usar ajax para hacer esta llamada, así que utilizo un iframe que creo dinámicamente con jquery, le asigno el src que realizará la llamada al constructor del fichero.

Al mismo tiempo que se crea el archivo, se va guardando en el servidor el progreso en el proceso de creación, que quiero reflejar en una progressbar de jqueryui. Esta llamada sí que la realizo con jquery.ajax() y envío una petición al servidor de al siguiente manera:

Código:
//llama a la url que devuelve el % completado
function verProgreso(){
    jQuery.ajax({
        url: miurl,
        dataType: "text",
        success: actualizarBarra
    });
}

//actualiza la barra y espera 1 seg para volver a mirar
function actualizarBarra(data) {
    $progressbar.progressbar("option", data);
    global_timer= setTimeout(verProgreso, 1000);

    //esto se dejará de ejecutar cuando se termine de cargar el fichero, via onload en el iframe
}


function descargarFichero(){
    $frame= jQuery("<iframe id='descarga'></iframe>");
    $frame.attr("src", url_de_descarga);  //crea y descarga el fichero como attachment

    verProgreso();  //se muestra la barra y se activa el proceso de descargas

    jQuery(document.body).append($frame);  //con esto se activa la creación y descarga del pdf
}

Esto funciona bien en firefox, pero en IE7 no sé qué pasa que empieza a colgarse, se ve cómo la memoria que ocupa el proceso empieza a subir y cada vez consume más CPU, hasta que tengo que cerrar el proceso via administrador de tareas de windows.

No he podido depurarlo satisfactoriamente para IE, pero parece que da un fallo en la ejecución del setTimeout, o bien, en la ejecución del ajax...

¿Veis algo raro?
¿Alguien ha hecho algo parecido y le ha funcionado?
¿Podeis indicarme si todo está correctamente enfocado?

Muchas gracias por todo.

Un saludo.