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.