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
Código de la función en ajax:
Código Javascript:
Ver original
function buscar(){ var xmlhttp; var n=document.getElementById('search').value; var campo=document.getElementById('_filtrar').value; var estado=document.getElementById('estado').value; if(n==''){ document.getElementById("resultados").innerHTML=""; return; } if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else{ // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200){ document.getElementById("resultados").innerHTML=xmlhttp.responseText; }else{ var cargando="<center><img width='20' height='20' style='vertical-align:sub' src='imagenes/loading.gif'/><span class='form'>Cargando...</span></center>" document.getElementById("resultados").innerHTML = cargando; } } xmlhttp.open("POST","filtrar_clientes.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("busqueda="+n+"&j_campo="+campo+"&estado="+estado); }
Código del archivo donde hago la consulta y muestro los resultados (filtrar_clientes.php)
Código PHP:
Ver original
$columna=$_POST["j_campo"]; $dato=$_POST["busqueda"]; $estado=$_POST["estado"]; $sql="SELECT * FROM vw_clientes WHERE $columna LIKE '$dato%' AND Estado=$estado ORDER BY Nombres ; $result = $conexion->query($sql); while ($fila = $result->fetch_row()) { echo $fila[1]; echo $fila[2]; echo $fila[3]; echo $fila[4]; }