Was Sie tun, ist eine "Entprellung". Eine Entprellung ist, wenn Sie einen Timer starten Countdown, wenn ein Benutzer die Eingabe startet. Wenn sie vor Ablauf des Timers mehr Eingaben tätigen, wird der Timer zurückgesetzt und beginnt erneut zu zählen. Erst wenn der Timer beendet ist, wird der AJAX-Anruf getätigt. In diesem Fall ist eine Verzögerung von 200 Millisekunden die Forschung, die die meisten Menschen als reaktionsschnell empfinden.
Wenn Sie jedoch wirklich möchten, dass Ergebnisse einfließen, wenn der Benutzer tippt, wird das, was Sie stattdessen brauchen, als "Drosselung" bezeichnet. Eine Drosselung ähnelt einer Entprellung, außer dass sie in regelmäßigen Intervallen ausgelöst wird, anstatt darauf zu warten, dass die Eingabe stoppt. Um einen zu bauen, würden Sie immer noch einen Timer haben, aber Sie würden ihn nicht jedes Mal zurücksetzen, wenn der Benutzer mehr Eingaben eingibt. Stattdessen würden Sie einen booleschen Wert verwenden, um zu verfolgen, ob neue Eingaben eingegeben wurden oder nicht. Wenn der Timer beendet ist, prüft er, ob der Boolesche Wert wahr ist, wenn dies der Fall ist, setze ihn auf "Falsch" und starte den Countdown des Timers neu.
Sie können beide Methoden verbessern, indem Sie verfolgen, ob bereits ein AJAX-Anruf stattgefunden hat. In beiden Fällen, wenn der Timer abgelaufen ist und die boolesche Verfolgung, wenn ein Anruf ausgeführt wird, wahr ist, starten Sie den Timer neu.
Sowohl ein debounce als auch ein throttle sind bereits in mehreren Hilfsbibliotheken wie beispielsweise lodash verfügbar. Sie können sie verwenden, um Ihre vorhandenen Ereignishandler zu umbrechen.
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);
Vergessen Sie nicht, diese Antwort richtig – Soviut
zu markieren ich, dass es morgen tun können – LunielleDev