2008-09-16 9 views
5

Con este código que puede mostrar un gif animado, mientras que el script del servidor está en ejecución:¿Cómo se muestra el progreso de un script de servidor en jQuery?

function calculateTotals() { 
    $('#results').load('getResults.php', null, showStatusFinished); 
    showLoadStatus(); 
} 

function showLoadStatus() { 
    $('#status').html(''); 
} 


function showStatusFinished() { 
    $('#status').html('Finished.'); 
} 

Sin embargo, me gustaría mostrar un estado de hasta qué punto a lo largo de la secuencia de comandos es, por ejemplo, "Línea de procesamiento 342 de 20000 ..." y haga que cuente hasta que finalice.

¿Cómo puedo hacer eso? Puedo hacer un script de servidor que contenga constantemente la información actualizada, pero ¿dónde puse el comando para leer esto, por ejemplo, cada segundo?

Respuesta

2

Después de leer sus comentarios a la respuesta de Andrew.

Se podría leer el estado de esta manera:

function getStatus() { 
    $.getJSON("/status.php",{"session":0, "requestID":12345}, 
    function(data) { //data is the returned JSON object from the server {name:"value"} 
      setStatus(data.status); 
      window.setTimeout("getStatus()",intervalInMS) 
    }); 
} 

Usando este método se puede abrir varias petición XHR simultánea en el servidor.

toda su status.php como a la salida es:

{"status":"We are done row 1040/45983459"} 

Puede sin embargo la salida hasta la información que desea en la respuesta y procesarlo en consecuencia (la alimentación de una barra de progreso, por ejemplo, o la realización de una animación. .)

Para obtener más información sobre $ .getJSON ver http://docs.jquery.com/Ajax/jQuery.getJSON

0

La secuencia de comandos del lado del servidor de alguna manera debe mantener su progreso en algún lugar del servidor (archivo, campo en la base de datos, memoria, etc.).

Debería tener la función AJAX para devolver el progreso actual. Encuestar esta función una vez por segundo y mostrar el resultado en consecuencia.

0

Sin saber cómo funciona el código del lado del servidor es difícil de decir. Sin embargo, hay tres etapas en el proceso. En primer lugar, debe llamar a un script de creación de empleo. Esto devuelve un número de identificación y configura el servidor funcionando. Luego, cada segundo o más, debe llamar a un script de estado que devuelve un mensaje de estado que desea mostrar. Ese script de estado también debe devolver un valor que indique si el trabajo ha finalizado o no. Cuando la secuencia de comandos de estado indica que el trabajo ha terminado, deja de sondear.

Cómo obtener este script de estado es saber que el estado del trabajo depende en gran medida de cómo esté configurado el servidor, pero probablemente implique escribir el mensaje en una tabla de base de datos en varios momentos del trabajo. La secuencia de comandos de estado luego lee este mensaje de la base de datos.

+0

derecho, pero ¿dónde pongo la línea que lee el guión de estado? Eso es lo que no entiendo. No puedo hacerlo en mi función showLoadStatus() ya que solo se ejecuta una vez. –

1

No estoy de acuerdo con los detalles de jQuery, pero una respuesta general que no implica sondeo de wold be: Utilice una variación de la técnica forever frame. Básicamente, crea un iframe oculto y configura el src del mismo como 'getresults.php'. Dentro de getresults "secuencia" bloques de script, que son llamadas a una función javascrpt en el documento principal que realmente actualiza el progreso. Aquí está an example que muestra la idea básica detrás de un marco para siempre. (Sin embargo, no recomendaría usar su JS o HTML real, es razonablemente promedio)

Cuestiones relacionadas