Foros del Web » Programando para Internet » Javascript »

Problema con busqueda dinamica con ajax

Estas en el tema de Problema con busqueda dinamica con ajax en el foro de Javascript en Foros del Web. Buen Día, Tengo un archivo donde hago consultas a una base de datos cada vez que pulso una tecla dentro de una caja de texto, ...
  #1 (permalink)  
Antiguo 02/12/2013, 09:38
 
Fecha de Ingreso: diciembre-2012
Mensajes: 21
Antigüedad: 11 años, 4 meses
Puntos: 1
Problema con busqueda dinamica con ajax

Buen Día,

Tengo un archivo donde hago consultas a una base de datos cada vez que pulso una tecla dentro de una caja de texto, esto genera un evento que llama a una función ajax y esta procesa un archivo php donde devuelvo el resultado; el problema esta si escribo muy rapido el texto, no me muestra el resultado correcto sino mas bien muestra todos los datos existentes. Cabe destacar que si escribo letra por letra de forma lenta si muestra lo correcto. Necesito saber si hay algo que deba mejorar en mi código para que al escribir una palabra me muestre los resultados correctos. Gracias de antemano.

Código donde esta la caja de texto llamada "search":
Código HTML:
Ver original
  1. <select id="_filtrar" name="_filtrar">
  2.     <option value="Identificacion">Cedula</option>
  3.     <option value="Tipo_Persona">Tipo Persona</option>
  4.     <option value="Nombres">Nombres</option>
  5.     <option value="Genero">Genero</option>
  6.     <option value="Estado_Civil">Estado Civil</option>
  7.     <option value="Edad">Edad</option>
  8.     <option value="Estado_Ubicacion">Estado</option>
  9.     <option value="Telef_Celular">Teléfono Celular</option>
  10.     <option value="Persona_Contacto">Persona Contacto</option>
  11.     <option value="Correo">Correo</option>
  12.  
  13. <input type="hidden" id="estado" name="estado" value="1">
  14.  
  15. <input type="text" id="search" name="search" size="60" onKeyUp="buscar()">


Código de la función en ajax:
Código Javascript:
Ver original
  1. function buscar(){
  2. var xmlhttp;
  3.  
  4. var n=document.getElementById('search').value;
  5. var campo=document.getElementById('_filtrar').value;
  6. var estado=document.getElementById('estado').value;
  7.  
  8. if(n==''){
  9. document.getElementById("resultados").innerHTML="";
  10. return;
  11. }
  12.  
  13. if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
  14. xmlhttp=new XMLHttpRequest();
  15. }
  16. else{ // code for IE6, IE5
  17. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  18. }
  19. xmlhttp.onreadystatechange=function()
  20. {
  21. if (xmlhttp.readyState==4 && xmlhttp.status==200){
  22. document.getElementById("resultados").innerHTML=xmlhttp.responseText;
  23. }else{
  24. var cargando="<center><img width='20' height='20' style='vertical-align:sub' src='imagenes/loading.gif'/><span class='form'>Cargando...</span></center>"
  25. document.getElementById("resultados").innerHTML = cargando;
  26. }
  27. }
  28. xmlhttp.open("POST","filtrar_clientes.php",true);
  29. xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  30. xmlhttp.send("busqueda="+n+"&j_campo="+campo+"&estado="+estado);
  31. }

Código del archivo donde hago la consulta y muestro los resultados (filtrar_clientes.php)
Código PHP:
Ver original
  1. $columna=$_POST["j_campo"];
  2. $dato=$_POST["busqueda"];
  3. $estado=$_POST["estado"];
  4.  
  5.  
  6. $sql="SELECT * FROM vw_clientes WHERE $columna LIKE '$dato%' AND Estado=$estado ORDER BY Nombres ;
  7.  
  8. $result = $conexion->query($sql);
  9.  
  10. while ($fila = $result->fetch_row()) {
  11.    echo $fila[1];
  12.    echo $fila[2];
  13.    echo $fila[3];
  14.    echo $fila[4];
  15. }
  #2 (permalink)  
Antiguo 02/12/2013, 10:34
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Problema con busqueda dinamica con ajax

Prueba a matar la llamada ajax que se hizo antes cuando pulsas otra tecla y aún no has recibido respuesta de la anterior.
  #3 (permalink)  
Antiguo 02/12/2013, 10:42
 
Fecha de Ingreso: diciembre-2012
Mensajes: 21
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Problema con busqueda dinamica con ajax

Cita:
Iniciado por marlanga Ver Mensaje
Prueba a matar la llamada ajax que se hizo antes cuando pulsas otra tecla y aún no has recibido respuesta de la anterior.
Ese es el problema que nose como matar la llamada ajax
  #4 (permalink)  
Antiguo 02/12/2013, 11:05
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Problema con busqueda dinamica con ajax

Almacena tu objeto xmlhttp en una variable global, busca en google cómo matar el objeto XMLHttpRequest, y modifica tu código para matar ese objeto xmlhttp antes de crear uno nuevo y asignárselo. Y no olvides ponerlo a null cuando reciba la respuesta.
  #5 (permalink)  
Antiguo 03/12/2013, 11:05
 
Fecha de Ingreso: diciembre-2012
Mensajes: 21
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Problema con busqueda dinamica con ajax

Cita:
Iniciado por marlanga Ver Mensaje
Almacena tu objeto xmlhttp en una variable global, busca en google cómo matar el objeto XMLHttpRequest, y modifica tu código para matar ese objeto xmlhttp antes de crear uno nuevo y asignárselo. Y no olvides ponerlo a null cuando reciba la respuesta.

Lo hice de la siguiente forma pero igual me sigue dando problemas, nose donde esta el error
Código Javascript:
Ver original
  1. function objetoAjax(){
  2.     var xmlhttp=false;
  3.     try {
  4.         xmlhttp = new ActiveXObject('MSXML2.XMLHTTP.3.0');
  5.     } catch (e) {
  6.         try {
  7.            xmlhttp = new ActiveXObject('MSXML2.XMLHTTP.3.0');
  8.         } catch (E) {
  9.             xmlhttp = false;
  10.           }
  11.     }
  12.  
  13.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  14.         xmlhttp = new XMLHttpRequest();
  15.     }
  16.     return xmlhttp;
  17. }
  18.  
  19.  
  20. function buscar{
  21.     var n=document.getElementById('search').value;
  22.     var campo=document.getElementById('_filtrar').value;
  23.     var estado=document.getElementById('estado').value;
  24.     divResultado = document.getElementById('resultados');
  25.    
  26.       var ajax=objetoAjax();
  27.       ajax.abort();
  28.       ajax.open("POST", "filtrar.php",true);
  29.       ajax.onreadystatechange=function() {
  30.         if (ajax.readyState==4) {
  31.             if(ajax.status==200)
  32.                 divResultado.innerHTML = ajax.responseText;
  33.         }else {
  34.             var cargando="<center><img width='20' height='20' style='vertical-align:sub' src='imagenes/loading.gif'/><span class='form'>Cargando...</span></center>";
  35.             document.getElementById("resultados").innerHTML = cargando;
  36.         }
  37.     }
  38.     ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  39.     ajax.send("busqueda="+n+"&campo="+campo+"&estado="+estado);
  40. }
  #6 (permalink)  
Antiguo 03/12/2013, 13:53
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Problema con busqueda dinamica con ajax

No has hecho nada de lo que te dije, pero quizás te hayas dado cuenta de que usar funciones ayuda a tener un código mucho más limpio.

Ahora, haz lo que te dije. Matar un objeto ajax guardado localmente en cuanto lo creas, no es lo que te dije; además es completamente inútil; un objeto ajax que no ha sido enviado, no se puede matar: ya está muerto.

Última edición por marlanga; 03/12/2013 a las 14:00

Etiquetas: ajax
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 03:02.