No se ha recibido ningún dato (AJAX)

Iniciado por basickdagger, 8 Abril 2014, 20:28 PM

0 Miembros y 1 Visitante están viendo este tema.

basickdagger

tengo un input donde realizo busquedas en mi BD...
Código (html4strict) [Seleccionar]

Búsqueda:<input id="search" type="Text" onkeyup="cargar_datos()" size="50">




llamo a mi función de ajax

Código (javascript) [Seleccionar]

function cargar_datos()()
{
var xmlhttp;
var n=document.getElementById('search').value;
if(n==''){
document.getElementById("busqueda").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("busqueda").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","betr.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("q="+n);
}


para realizar una consulta sencilla en mi archivo "betr.php"...(pongo solo una parte)

Código (php) [Seleccionar]

<?php
$q
=$_POST[q];

$sql="SELECT * from archivos where cliente LIKE '%".$q."%' or sub_cliente LIKE '%".$q."%' or archivo LIKE '%".$q."%' or documento LIKE '%".$q."%'";

$res=mysql_query($sql,$enlace);

if(
mysql_num_rows($res)==0){

echo 
'<b>No hay sugerencias</b>';

}else{

   
?>

<div class="resultados">
  <table id="listado">      
    <tr><th>Empresa</th><th>Cliente</th><th>Sub-Cliente</th><th>Fecha</th><th>Nombre del Archivo</th><th>Tipo de Documento</th><th>Archivo</th></tr>
<?php
while($row mysql_fetch_array($res)){
echo 
"<tr><td>".$row['empresa']."</td><td>".$row['cliente']."</td><td>".$row['sub_cliente']."</td><td>".$row['fecha']."</td><td>".$row['archivo']."</td><td>".$row['documento']."</td><td><a href='descarga.php?file=".$row['ruta']."'>Descargar Archivo</a></td></tr>";
}
 
?>




bueno, todo esto me funciona y me muestra los resultados...pero si comienzo a jugar metiendo y quitando datos del input keyup, llega un momento en el que ya no reacciona el sitio,y si recargo la pagina me muestra el siguiente mensaje:

Citar
No se ha recibido ningún dato
y me da las opciones de cargar de nuevo, pero solo hasta despues de un rato (15-20 segundos) vuelve a funcionar y así sucede...

tengo aprox unos 40 registros pero no me parecen mucho...
donde podria estar mi problema alguna idea?

saludos

#!drvy

El problema es que literalmente estas haciendo una consulta por cada pulsación de teclado.

Saludos

basickdagger

Cita de: #!drvy en  8 Abril 2014, 21:05 PM
El problema es que literalmente estas haciendo una consulta por cada pulsación de teclado.

Saludos
gracias por la respuesta, aunque bien, algo me había imaginado, pero de que manera pudiera hacerlo para que hiciera la búsqueda cada que ingreso un valor, alguna sugerencia para seguir utilizando onkeyup donde no tenga que realizar un submit..



saludos

EFEX

GITHUB 

Camarografo77

Usa el evento onblur que se ejecuta cuando se pierde el foco de un campo de texto.

Saludos.

#!drvy

Tienes que optimizar.

En vez de hacer una consulta por cada tecla pulsada, haz lo así (ejemplo).

Esperar a que haya al menos 3 caracteres antes de hacer la primera consulta.
Si los datos devueltos son pocos (<50), sacarlos todos y ir procesando con js en vez de volver a hacer consultas.

Si son muchos, hacer otra consulta hasta que se reduzcan.

Tienes que intentar hacer el menor numero de requests tanto a la BD como al servidor.

Saludos

basickdagger

muchas gracias por su respuestas, y ps vaya, después de todo me inclinare por la respuesta de drvy, voy a probar a ver que tal, si no logro hacerla funcionar, tomare la regla de escribir la palabra completa y despues buscarla... saludos