Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/09/2012, 06:18
Avatar de Naahuel
Naahuel
 
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 8 meses
Puntos: 192
Respuesta: ¿Como crear una barra progresiva mientras dura una consulta a la base de d

No estoy seguro si esto puede lograrse del lado del servidor solamente. Con AJAX, sí es más fácil y se hace todo el tiempo.

Sin embargo, no es tan fácil usar una barra de progreso pues esto requeriría saber de antemano el tiempo que durará la consulta. Entonces se usan los gifs giratorios o con barras que van y vuelven ( http://www.ajaxload.info/ ).

Otra opción (menos efectiva, más trabajosa) sería crear un script que haga muuuchas consultas y registre los tiempos de respuesta. Tomás el peor caso y estimas que eso es lo más que puede demorar y tomas ese tiempo para hacer tu barra de progreso. Si la consulta termina antes, hacés saltar la barra al 100% y listo. De nuevo, esto es más trabajoso y menos efectivo. Además, va a dar la impresión de que el sitio es más lento.

Te dejo un ejemplo MUY básico, usando un poquito de jQuery (que facilita las consultas AJAX y la creación y manipulación de elementos del DOM)

index.php
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <meta charset="utf-8" />
  3. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  4. <script type="text/javascript">
  5.     $(function(){
  6.         //crear gif y ocultarlo
  7.         $loading = $('<img src="loading.gif" id="loading" />').hide();
  8.         //agregarlo al body
  9.         $('body').append($loading);
  10.        
  11.         $('#consultar').click(function(e){
  12.             e.preventDefault();
  13.             $_elem = $(this);
  14.            
  15.             //hacer la consulta
  16.             $loading.show() //mostramos el gif
  17.             $.ajax({
  18.                 url: 'consultame.php'
  19.             }).done(function(resultado){
  20.                 //ocultamos el gif
  21.                 $loading.hide();
  22.                
  23.                 //agregar el resultado, luego del link
  24.                 $_elem.after(resultado);
  25.             });
  26.         });
  27.        
  28.     });
  29. <style type="text/css">
  30.     <!--
  31.     #loading{
  32.         position: fixed;
  33.         left: 50%;
  34.         top: 50%;
  35.     }
  36.     -->
  37.  
  38. <title>Ejemplo de ajax</title>
  39. </head>
  40.     <a href="#" id="consultar">Consultar</a>
  41. </body>
  42. </html>

consultame.php
Código PHP:
Ver original
  1. <?php
  2.     //emulamos una consulta a la base de datos
  3.     sleep(1);
  4.     echo '<p>Resultado!</p>';
  5. ?>

Ver funcionando: http://nahueljose.com.ar/ejemplos/ajax-test/01/
__________________
nahueljose.com.ar