Wypróbuj ten kod js zamiast tego, co masz. Dodałem funkcję opóźnienia, aby skrypt czekał określoną ilość czasu po tym, jak użytkownik przestanie pisać przed wysłaniem żądania. Zapobiega to wysyłaniu dużej liczby żądań do serwera.
<script type="text/javascript">
var delay = (function() {
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
$("#search-box").keyup(
function () {
delay(function () {
var keyword = $("#search-box").val();
var URL = encodeURI("search.php?q=" + keyword);
$.ajax({
url: URL,
cache: false,
type: "GET",
success: function(response) {
$("#results").html(response);
}
});
}, 500);
}
);
</script>