Foros del Web » Programando para Internet » Javascript »

Load bar idea..

Estas en el tema de Load bar idea.. en el foro de Javascript en Foros del Web. buenos dias estoy haciendo una carga de datos ,... con un archivo .txt que luego de subirlo al servidor lo lee y luego linea por ...
  #1 (permalink)  
Antiguo 13/03/2013, 09:15
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 12 años, 1 mes
Puntos: 1
Load bar idea..

buenos dias estoy haciendo una carga de datos ,... con un archivo .txt que luego de subirlo al servidor lo lee y luego linea por linea inserta en una tabla de la base de datos , el proceso dura mucho aproximadamente mas de 1h por lo que quisiera mientras va cargando en la base de datos hacer un load bar o algo parecido

por ahora solo tengo un gif ,, que se ve mientras espera la respuesta del servidor, y cuando termina de registrar todo se quita el gif y muestra el mensaje .. !!

se podria y como si me dan idea seria bueno ,, o alguna informacion que pueda leer con respecto a eso... uso codeigniter.. como framework php
__________________
Miguel0N
  #2 (permalink)  
Antiguo 13/03/2013, 12:22
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 14 años
Puntos: 1532
Respuesta: Load bar idea..

me temo que en el caso de AJAX los navegadores actuales no soportan la nueva API (XHR level 2) que en teoría si pudiera satisfacer ése requerimeinto.

del resto las alternativas son SSE (no funciona en IE), ajax longPolling, Html5 web Sockets, flash u applets de java, todos con sus ventajas e inconvenientes
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 13/03/2013, 14:48
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 15 años
Puntos: 1567
Respuesta: Load bar idea..

Un par de cosas podés hacer, algo así sería más sencillo
http://foros.emprear.com/ajax/ajax_t..._ajax_fdw.html

Pero simplemente para dar una idea que el proceso se está ejecutando, haciendo que la actualización de la barra de progreso de hiciese cada más tiempo si en tu caso tarda mucho tiempo la ejecución.
Analizá el código fuente del archivo y el del cargarAjax.js, para ver sonde inserté las funciones iniciar() y detener()

Algo más preciso, se puede hacer con un iframe oculto, y mandando a la pagina principal un valor para que vaya incrementando el ancho de la imagen imprimiendo una script cada tanto numero de registros, tendría que sacar las cuentas

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #4 (permalink)  
Antiguo 13/03/2013, 20:29
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Load bar idea..

hey me gusta lo del enlace que colocaste el proceso y si podria uso XMLHttpRequest() y tiene un evento que cuando termina de registrar ingresa al evento alli podria colocar el detener() y el iniciar() en el evento uploadProgress. provare a ver que tal .. :)
__________________
Miguel0N
  #5 (permalink)  
Antiguo 13/03/2013, 20:37
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 15 años
Puntos: 1567
Respuesta: Load bar idea..

Cita:
Iniciado por CoolM Ver Mensaje
hey me gusta lo del enlace que colocaste el proceso y si podria uso XMLHttpRequest() y tiene un evento que cuando termina de registrar ingresa al evento alli podria colocar el detener() y el iniciar() en el evento uploadProgress. provare a ver que tal .. :)
Si, puede ser, mirá esto otro,
http://foros.emprear.com/ajax/barra/
está un poco "dibujado" para que se vea la animación,esta hecho leyendo un archivo de 10000 lineas, pero lo hace tan rápido que casi no se ve, le agregue un setTimeout a la función para exagerala

El php es este

Código PHP:
Ver original
  1. <?php
  2. $lineas = file('registrosx.txt');
  3. $e = 0;
  4. foreach ($lineas as $num_linea => $linea) {
  5.  
  6.     echo $linea . "<br />\n";
  7.     if($e == 1000){
  8.     echo"
  9.    <script>
  10.    parent.barra(10);
  11.    </script>
  12.    ";
  13.     }
  14.    
  15.    if($e == 2000){
  16.     echo"
  17.    <script>
  18.    parent.barra(20);
  19.    </script>
  20.    ";
  21.     }
  22.     if($e == 3000){
  23.     echo"
  24.    <script>
  25.    parent.barra(30);
  26.    </script>
  27.    ";
  28.     }
  29.    
  30.    if($e == 4000){
  31.     echo"
  32.    <script>
  33.    parent.barra(40);
  34.    </script>
  35.    ";
  36.     }  
  37.    if($e == 5000){
  38.     echo"
  39.    <script>
  40.    parent.barra(50);
  41.    </script>
  42.    ";
  43.     }
  44.     if($e == 6000){
  45.     echo"
  46.    <script>
  47.    parent.barra(60);
  48.    </script>
  49.    ";
  50.     }
  51.    
  52.    if($e == 7000){
  53.     echo"
  54.    <script>
  55.    parent.barra(70);
  56.    </script>
  57.    ";
  58.     }      
  59.    if($e == 8000){
  60.     echo"
  61.    <script>
  62.    parent.barra(80);
  63.    </script>
  64.    ";
  65.     }
  66.     if($e == 9000){
  67.     echo"
  68.    <script>
  69.    parent.barra(90);
  70.    </script>
  71.    ";
  72.     }
  73.    
  74.    if($e == 10000){
  75.     echo"
  76.    <script>
  77.    parent.barra(100);
  78.    </script>
  79.    ";
  80.     }      
  81.  
  82.  
  83.     $e++;
  84.  
  85. }
  86.  
  87. ?>

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #6 (permalink)  
Antiguo 14/03/2013, 13:15
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Load bar idea..

pero esos echos se muestran es cuando termine el ciclo del foreach ...??? tendria que ir mostrando el echo inmediatamente cuando pasa por esa linea.. no???
__________________
Miguel0N
  #7 (permalink)  
Antiguo 14/03/2013, 13:36
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 15 años
Puntos: 1567
Respuesta: Load bar idea..

En realidad yo hice los echos para cargar un poco el trabajo y se vea algo de la animación, obviamente no cree una base de datos, vos solo le harías echo a la script que llama la función en el parent después de cierto numero de inserts. En la teoría funciona, ahora, aplicado a algo como lo que vos decís, habría que probar. No tengo idea como trabaja una script que actualiza un bd durante "una hora", no me es muy habitual

Te dejo otra demo más sencilla de configurar, lee un archivo de texto de 80000 lineas
http://foros.emprear.com/ajax/barra2/
se inicia en registros.html

solo hay que modificar
Código:
$incremento = 100; // determina el valor de incremento, 100=1%, 50=2%, 40=2.5%, 25=4%, 20=5%, 10=10%, 5=25%
y lo que para mi son hechos, para vos serían los inserts a la BD

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 14/03/2013 a las 18:59
  #8 (permalink)  
Antiguo 14/03/2013, 21:01
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Load bar idea..

este es el codigo que registra y dura mas de 1h en registrar o actualizar en la base de datos

que hace primero abro el archivo previamente subido el archivo pesa 15M y tiene mas de 90 mil lineas

leo el archivo y separo los campos ya que son de ancho fijo cada campo tiene su tamanio

verifico el codigo del archivo con el que tengo en la base de datos para ver si ya existe si existe actualizo si no registro

tarda por que se hace todo ese proceso linea por linea me imagino ..

cuando termina de procesar envia el mensaje a la vista que esta esperando la respuesta.. que son los echos que salen alli en caso de un erros muestra el echo de erro, si no muestra que se ingresaron bien ... tu crees que si coloco los echos del script que me incremente el load bar... se valla mostrando en cada ciclo... ??


Código PHP:

public function insertarRepuestosMaster($archivo_nombre){
        
        
$archivo file('C:\wamp\www\pedidoSugerido\archivos\ '.$archivo_nombre);  
        
$cont_linea 0;
        
$mensaje "error";
        
$mensajeU "Datos Actualizados";
        
$mensajeI "Datos Registrados";
        
$contarUpdate 0;
        
$contarInsert 0;
        
              for(
$i=0;$i<1;$i++){
                   
                  
$maximo strlen($archivo[$i]); // cuantos caracteres tiene la primera linea 163
              

   
           if(
$maximo == '163'){
              
               foreach (
$archivo as $linea_num => $linea)
           {
              
$codigo substr($linea017);
              
$codAlt substr($linea1721);
              
$precio substr($linea3817);
              
$descripcionMala substr($linea5523);
              
$campo5 substr($linea788);
              
$campo6 substr($linea8632);
              
$campo7 substr($linea11820);
              
$campo8 substr($linea13812);
              
$campo9 substr($linea15011);
              
              if(
$this->verificarMaster($codigo)){
                  
$data "";  
                  
$data = array(
                      
'codigo' => $codigo,
                      
'codigoAlt' => $codAlt,
                      
'precio' => $precio,
                      
'descripcion' => $descripcionMala,
                      
'campo5' => $campo5,
                      
'campo6' => $campo6,
                      
'campo7' => $campo7,
                      
'campo8' => $campo8,
                      
'campo9' => $campo9
                      
);
                  
           
$id $this->verificarMaster($codigo);
          
           
$this->db->where('id'$id);
           
$this->db->update('master',$data);
           
$contarUpdate ++;
           
           
$mensaje $this->db->_error_message();
           if(empty(
$mensaje)){
           
$mensajeU "Datos Actualizados";
           }else{
               
$mensaje "Error Archivo Incorrecto";
                }
                  
              }else{
              
              
$this->db->set('codigo',$codigo);
              
$this->db->set('codigoAlt',$codAlt);
              
$this->db->set('precio',$precio);
              
$this->db->set('descripcion',$descripcionMala);
              
$this->db->set('campo5',$campo5);
              
$this->db->set('campo6',$campo6);
              
$this->db->set('campo7',$campo7);
              
$this->db->set('campo8',$campo8);
               
$this->db->set('campo9',$campo9);

              
$this->db->insert('master'); 
              
$contarInsert ++;
              
           
$mensaje $this->db->_error_message();
           if(empty(
$mensaje)){
           
$mensajeI "Datos Registrados";
           }else{
              
               
$mensaje "Error Archivo Incorrecto";
                }
              
              }
           }
           
              echo 
$mensajeU.": ".$contarUpdate."  ".$mensajeI.": ".$contarInsert;
               
               
           }  else {
               
              echo 
"Archivo Incorrecto";
           }
        
          
             
// echo $cont_linea."Registros";
        
    

__________________
Miguel0N
  #9 (permalink)  
Antiguo 15/03/2013, 05:31
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 15 años
Puntos: 1567
Respuesta: Load bar idea..

Mira, estamos hablando de cosas que habría que probar. yo pensé que tenías algo más simple
un archivo
aaaa bbb ccc ddd eee ffff
lo abrías con file
le hacías un explode a cada linea
transformabas cada parte en el valor del campo de la tabla
hacés el insert para $fila[0], $fila[1], etc....
Mi segundo último ejemplo, trabaja perfecto en Chrome, decentemente en IE y Opera, y en Firefox, no muy bien, obviamente cada navegador tiene limitaciones en la velocidad con que pasa y ejecuta el javascript del iframe al parent.

Yo me limitaría a usar el primer ejempo que te deje, el que inicia el timer con ajax y lo detiene al recibir el responseText, y en lugar de una barra, solo un gif tipo loader y el valor del timer para mostrar que hay actividad
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #10 (permalink)  
Antiguo 15/03/2013, 07:51
 
Fecha de Ingreso: junio-2010
Mensajes: 31
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Load bar idea..

si de momento usare el timer ya tengo el loader gif... y bue quizas hay q hacer pruebas... he visto sobre la funcion flush() que trabaja con el buffer pero bueno gracias por los ejemplos que me mostrastes . .
__________________
Miguel0N

Etiquetas: bar, load, php
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 10:32.