Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Mensaje iniciado por: basickdagger en 8 Abril 2014, 20:28 PM

Título: No se ha recibido ningún dato (AJAX)
Publicado por: basickdagger en 8 Abril 2014, 20:28 PM
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
Título: Re: No se ha recibido ningún dato (AJAX)
Publicado por: #!drvy en 8 Abril 2014, 21:05 PM
El problema es que literalmente estas haciendo una consulta por cada pulsación de teclado.

Saludos
Título: Re: No se ha recibido ningún dato (AJAX)
Publicado por: basickdagger en 9 Abril 2014, 17:44 PM
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
Título: Re: No se ha recibido ningún dato (AJAX)
Publicado por: EFEX en 9 Abril 2014, 21:19 PM
Podrias implementar Autocomplete con JQueryUI

http://jqueryui.com/autocomplete/#remote-jsonp
Título: Re: No se ha recibido ningún dato (AJAX)
Publicado por: Camarografo77 en 9 Abril 2014, 22:51 PM
Usa el evento onblur que se ejecuta cuando se pierde el foco de un campo de texto.

Saludos.
Título: Re: No se ha recibido ningún dato (AJAX)
Publicado por: #!drvy en 10 Abril 2014, 10:05 AM
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
Título: Re: No se ha recibido ningún dato (AJAX)
Publicado por: basickdagger en 10 Abril 2014, 19:10 PM
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