Ce que vous faites s'appelle un "debounce". Un rebond est quand vous avez un compte à rebours commence à décompter quand un utilisateur commence l'entrée. Si elles entrent plus d'entrée avant la fin de la minuterie, la minuterie est réinitialisée et recommence à compter à nouveau. Ce n'est que lorsque la minuterie se termine que l'appel AJAX est fait. Dans ce cas, un délai de 200 ms est ce que la plupart des gens considèrent comme une réponse à la recherche.
Cependant, si vous voulez vraiment que les résultats se déversent au fur et à mesure que l'utilisateur tape, ce que vous devez à la place s'appelle un "accélérateur". Un étranglement est similaire à un rebond, sauf qu'il se déclenche à intervalles réguliers, plutôt que d'attendre que l'entrée s'arrête. Pour en construire un, vous auriez toujours une minuterie, cependant, vous ne le réinitialiserez pas à chaque fois que l'utilisateur saisira plus de données. Au lieu de cela, vous utiliseriez un booléen pour savoir si une nouvelle entrée avait été entrée ou non. Lorsque la minuterie se termine, elle vérifie si le booléen est vrai, si c'est le cas, mettez-le à false et redémarrez le compte à rebours.
Vous pouvez améliorer l'une ou l'autre méthode en gardant la trace si un appel AJAX était déjà en cours. Dans les deux cas, si la minuterie arrive à expiration et que le suivi booléen si un appel est en cours est vrai, redémarrez le minuteur.
Les fichiers debounce et throttle sont déjà disponibles dans plusieurs bibliothèques d'utilitaires, telles que lodash. Vous pouvez les utiliser pour envelopper vos gestionnaires d'événements existants.
var myInputChangeHandler = function() {
// do ajax call
};
// throttled handler will only be called every 200 ms...
var throttled = _.throttle(myInputChangeHandler, 200);
// ...no matter how many times this event fires
jQuery('input[type=text]').on('change', throttled);
Ne pas oublier de marquer cette réponse – Soviut
je peux le faire demain – LunielleDev