[Resuelto] Esperar cierto tiempo para empezar a buscar

Iniciado por :ohk<any>, 7 Agosto 2015, 17:26 PM

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

:ohk<any>

Hola gente,

Tengo una pequeña duda, cuando tengo un formulario de busqueda que empieza a buscar en la base de datos cuando el usuario esta escribiendo.
Con Jquery escucho lo que escribe y cuento los caracteres y cuando ha escrito 3 o mas caracteres el sistema se pone a buscar en la base de datos.

Pero esto me esta causando problemas porque tengo mas de veintiseis mil registros y la base de datos sufre un poco porque empieza a buscar desde el tercer caracter ingresado, y aun sin haber terminado de buscar el usuario sigue enviando solicitudes porque sigue escribiendo, a veces escribe 20 caracteres y el servidor se pone lento.

Entonces creí adecuado poner un contador de tiempo, algo asi como contar 500 ms y recien empezar a buscar, osea empezar a buscar cuando el usuario ha dejado de escribir por al menos medio segundo, me dejo entender?

He visto posibles soluciones con el setTimeout(), pero necesito disparar el evento cuando se empieza a escribir después del tercer caracter ingresado y cuando ha dejado de hacerlo por mas de 500 ms.

Alguien me da una mano?

Saludos

--OHK--
Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.

MinusFour

Necesitas establecer un timeout para ejecutar una peticion despues de 500ms cada que el usuario teclee. Este timeout lo tieens que guardar en una propiedad del elemento y revisar si existe primero. Si existe entonces tienes que limpiar el timeout y luego volver a establecer el timeout.

Código (javascript) [Seleccionar]

$('#input').on('input', function(){
  if(this.timeId !== undefined){
     //Necesita limpiarse:
    window.clearTimeout(this.timeId);
  }
  this.timeId = window.setTimeout(/*tu function a ejecutar a los 500ms*/, 500);
});


Tambien tienes que considerar la peticion que estas enviando al servidor. Por ejemplo...

El usuario teclea 'abc', se lanza el timeout.
Finaliza el timeout, se lanza la peticion AJAX.
El usuario teclea 'abcd', se lanza el timeout.
Finaliza el timeout, se lanza una nueva peticioin.

Ahora tienes que mostrar los resultados de la última petición y los resultados de la primera deben ser descartados.

:ohk<any>

Muchas gracias, lo pruebo de inmediato.

Saludos
Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.