Foros del Web » Programando para Internet » Javascript » Frameworks JS »

[jqeruy / ajax] barra de progreso en proceso en el servidor

Estas en el tema de [jqeruy / ajax] barra de progreso en proceso en el servidor en el foro de Frameworks JS en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 13/01/2011, 16:42
 
Fecha de Ingreso: agosto-2009
Mensajes: 67
Antigüedad: 15 años, 4 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.
  #2 (permalink)  
Antiguo 17/01/2011, 06:15
 
Fecha de Ingreso: agosto-2009
Mensajes: 67
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: [jqeruy / ajax] barra de progreso en proceso en el servidor

Hola a todos.

He avanzado en esto ya... hasta que me he vuelto a quedar atascado.

Ya he conseguido corregir el script (la cuestión es que todo parecía ir por el camino correcto en el primer post, salvo que las llamadas ajax no hacían lo que debían correctamente).

Ahora viene lo interesante:

El botón asignado ejecuta el código, genera un iframe y a éste se le asigna la tarea de descargar el fichero.

Mientras tanto, la barra está allí, y sube sin problemas hasta el 100%.

Sin embargo, el problema es que tengo un evento onload asociado al fin de la carga del iframe, pero éste no se ejecuta nunca. Como allí es donde tengo puestas varias comprobaciones antes de quitar el div de 'cargando' que tengo puesto, pues no lo quita.

Tengo varios comportamientos: Algunos navegadores no lo quitan, otros lo quitan, pero demasiado pronto (no esperan a que la página termine para lanzar el evento).

El evento lo estoy añadiendo con un bind("load") de jQuery justo después de haber añadido el iframe a mi documento, pero antes de cambiarle la url.

¿Alguna idea de cómo funcionan los eventos onload en los distintos navegadores?
¿Alguien puede darme alguna pista?

Gracias por adelantado.

Un saludo a todos.

Etiquetas: ajax, barra, proceso, progreso, servidores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:08.