Foros del Web » Programando para Internet » Jquery »

Carga de Datos con Scroll

Estas en el tema de Carga de Datos con Scroll en el foro de Jquery en Foros del Web. Hola compañeros, saludos a todos. Tengo un problema con la carga de datos con el scroll bar, lo que estoy haciendo basicamente es que cuando ...
  #1 (permalink)  
Antiguo 15/08/2013, 06:32
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Pregunta Carga de Datos con Scroll

Hola compañeros, saludos a todos.

Tengo un problema con la carga de datos con el scroll bar, lo que estoy haciendo basicamente es que cuando el scroll bar llegue al final me carga los datos siguiente de la consulta, como un paginado mas o menos, el problema que tengo es que al llegar al final de la pagina me esta haciendo 2 $post en vez de uno y esto me haciendo que el 2 $post solape el primero y se dejan de mostrar 10 registros, coloco aqui algo de mi codigo:

Aqui mi codifo Javascript, tengo una condicion que validad unos <SELECT>

Código Javascript:
Ver original
  1. $(window).scroll(function(){
  2.            if ($(window).scrollTop() == $(document).height() - $(window).height()){
  3.                 if($('#vendedorCuotas').val()!='null' && $('#ZonCuotas').val()!='null'){
  4.                    
  5.                       $('#_mensajesCarga').html('<div align="center"><img src="images/loading.gif"></div>');
  6.                  $.post("controlador/controladorReportes.php",{op: 'fil_vendedor_mas', codven: $('#vendedorCuotas').val()},
  7.                  function(data){
  8.                     //alert(data);
  9.                         if(data == ''){
  10.                             //alert('HERE');
  11.                           $('#_mensajesCarga').html('<div align="center">NO HAY MAS REGISTROS PARA MOSTRAR</div>');
  12.                         }else{         
  13.                         $('#_tabla_contenedor').append(data);
  14.                         $('#_mensajesCarga').html(''); 
  15.                         }
  16.  
  17.                       })
  18.                      
  19.                 }              
  20.           }
  21.       });

los datos que envio por POST los estoy recibiendo asi:
Código PHP:
Ver original
  1. if($_POST['op']=='fil_vendedor_mas'){
  2.  $cuoMas = cuotasZ($_POST['codven'],$_POST['op']);
  3.  include('../vistas/cuotaMasVista.php');
  4.  }

Y la funcion que ejecuta el SQL es esta:
Código PHP:
Ver original
  1. function cuotasZ($codigo,$opcion) {
  2.    if (!isset($_SESSION["cantidadcargadas"])){ $_SESSION["cantidadcargadas"]=0; }  
  3.     global $conexion;
  4.      
  5.     $query = "SELECT VEN_CODIGO, VEN_NOMBRE , CLI_CODIGO, CLI_NOMBRE, IFNULL(DET.ANTERI,0) AS ANTERI, IFNULL(DET.ACTUAL,0) AS ACTUAL,
  6.               IFNULL(ROUND((DET.ACTUAL/DET.ANTERI-1 )*100,2),0) AS PORCEN1 FROM dpvendedor
  7.              INNER JOIN dpclientes ON CLI_CODVEN=VEN_CODIGO
  8.              LEFT JOIN ( SELECT MOV_CODVEN AS CODVEN, MOV_CODCTA AS CODCTA, INV_GRUPO AS GRUPO,
  9.                      SUM(IF(YEAR(MOV_FECHA)=2012,MOV_TOTAL*MOV_CXUND*MOV_INVACT*IF(MOV_TIPDOC='FAV',1,-1),0)) AS ANTERI,
  10.                      SUM(IF(YEAR(MOV_FECHA)=2013,MOV_TOTAL*MOV_CXUND*MOV_INVACT*IF(MOV_TIPDOC='FAV',1,-1),0)) AS ACTUAL
  11.                      FROM dpmovinv IGNORE INDEX (DPMOVINV1)
  12.              LEFT JOIN dpinv IGNORE INDEX (DPINV2) ON MOV_CODIGO=INV_CODIGO
  13.              WHERE MOV_TIPDOC IN ('FAV','DEV','DPA') AND INV_GRUPO='000001' AND MONTH(MOV_FECHA)= 4
  14.              GROUP BY MOV_CODVEN, MOV_CODCTA )AS DET ON DET.CODVEN=VEN_CODIGO AND DET.CODCTA=CLI_CODIGO";
  15.                    
  16.    if($opcion=='fil_zona' || strlen($codigo)==3){                        
  17.    $query.=" WHERE (VEN_ZONA = '".$codigo."')";
  18.    }
  19.    if($opcion=='fil_vendedor' || strlen($codigo)==6){
  20.    $query.=" WHERE (VEN_CODIGO = '".$codigo."')";
  21.    }  
  22.    if($opcion=='fil_cliente'){
  23.    $query.=" WHERE (CLI_CODIGO = '".$codigo."')";
  24.    }
  25.     $query.=" GROUP BY VEN_CODIGO, CLI_CODIGO
  26.                  ORDER BY VEN_ZONA, VEN_CODIGO, DET.ACTUAL DESC";
  27.     if($opcion=='fil_zona_mas' || $opcion=='fil_vendedor_mas'){                  
  28.         $query.=" LIMIT ".$_SESSION["cantidadcargadas"].",10";
  29.     }else {    
  30.         $query.=" LIMIT 0,10";
  31.     }
  32.     #echo $query;
  33.     $result = $conexion->ejecutarQuery($query);
  34.     $_SESSION["cantidadcargadas"]+=10;
  35.     return $result;
  36.  
  37. }

De verdad no entiendo por que se estan haciendo 2 $post, esto lo evalue con FIREBUG, espero me haya explicado bien y puedan ayudarme

Saludos
  #2 (permalink)  
Antiguo 15/08/2013, 07:26
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Carga de Datos con Scroll

Hola de nuevo, compañeros estuve probando paso a paso muy detenidamente y el problema es que al llegar el scroll al final se carga un div con una imagen de CARGANDO, esto hace que el en el scroll haya un pequeño espacio que al seguirle dando al scroll vuelve a llegar al final y carga de nuevo.

Ahora bien, como bloqueo el scroll mientras se cargan los datos?

Saludos
  #3 (permalink)  
Antiguo 15/08/2013, 07:48
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 1 mes
Puntos: 52
Respuesta: Carga de Datos con Scroll

Cita:
Iniciado por mixzplit Ver Mensaje
Ahora bien, como bloqueo el scroll mientras se cargan los datos?

Saludos
Se me ocurre que uses la función $.ajax({}) y en el beforeSend cambias el scroll en ese div a hidden, una vez, en el success de $.ajax vuelves a habilitar el scroll.
__________________
Aprendiendo!!!
  #4 (permalink)  
Antiguo 15/08/2013, 09:10
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Carga de Datos con Scroll

Hola anacona16, fijate lo que hice, modifique toda la estructura

Agregue 2 funciones que las meto dentro de la condicion del window scroll
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2. var processing = false
  3.        $(window).scroll(function(){
  4.        
  5.            if ($(window).scrollTop() == $(document).height() - $(window).height()){
  6.              if(processing) return;      
  7.             mas_zonas(processing);      
  8.             mas_vendedores(processing);
  9.           }
  10.       });      
  11. });

Aqui las 2 funciones que estoy usando
Código Javascript:
Ver original
  1. function mas_zonas(process){
  2.           //alert(process);
  3.           var zonMas = 'fil_zona_mas'
  4.             if($('#ZonCuotas').val()!='null' && $('#vendedorCuotas').val()=='null'){
  5.                 //if(process) return;
  6.                $.ajax({
  7.                   type: "POST",
  8.                     url: "controlador/controladorReportes.php",
  9.                     data: 'op=' + zonMas+'&zona='+$('#ZonCuotas').val(),
  10.                     beforeSend: function() {
  11.                                    //$('#_mensajesCarga').html('<div align="center"><img src="images/loading.gif"></div>');
  12.                                   process = true;
  13.                                 },
  14.                     success: function(data) {  
  15.                            $('#_tabla_contenedor').append(data);
  16.                            //$('#_mensajesCarga').html('');
  17.                     },
  18.                     complete: function() { process = false; }
  19.                });                     
  20.                 }  
  21. }
  22.  
  23. function mas_vendedores(process){
  24.     var venMas = 'fil_vendedor_mas'
  25.                 if($('#vendedorCuotas').val()!='null' && $('#ZonCuotas').val()!='null'){
  26.                     alert(process)
  27.                if(process) return;
  28.                $.ajax({
  29.                   type: "POST",
  30.                     url: "controlador/controladorReportes.php",
  31.                     data: 'op=' + venMas+'&codven='+$('#vendedorCuotas').val(),
  32.                     beforeSend: function() {
  33.                                    process = true;
  34.                                    //$('#_mensajesCarga').html('<div align="center"><img src="images/loading.gif"></div>');
  35.                                  
  36.                                 },
  37.                     success: function(data) {  
  38.                            $('#_tabla_contenedor').append(data);
  39.                                $('#_mensajesCarga').html('');
  40.        
  41.                     },
  42.                     complete: function() { process = false; }
  43.  
  44.                });                     
  45.  
  46.                      
  47.                 }      
  48.    
  49. }


Como vera cambie todo a $AJAX, me esta funcionado bien, pero no es por que lo pase a AJAX y manejo mejor los eventos. Resulta que la el <DIV> donde me esta mostrando la imagen de carga cuando el scroll llega al final, me esta cambiando el tamaño de a pagina y si el usuario sigue bajando, se hacen 2 consultas, la segunda se ejecuta antes de que termine la primera y por eso se pierden los datos de la primera consulta y solo muestra el resultado de la segunda.
Le quite el DIV donde carga la imagen y funciona perfecto.

Esto se puede solucionar? quisiera colocar la imagen de carga por si la conexion es lenta

Saludos
  #5 (permalink)  
Antiguo 15/08/2013, 09:19
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 1 mes
Puntos: 52
Respuesta: Carga de Datos con Scroll

Como te digo, en el evento beforeSend puedes poner una imagen con posición fixed o algo asi, y luego en el evento success la quitas.
__________________
Aprendiendo!!!
  #6 (permalink)  
Antiguo 15/08/2013, 09:35
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Carga de Datos con Scroll

tienes razon, disculpa, gracias por la ayuda

Etiquetas: php, sql
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 12:14.