Sitem için anında arama yapmayı bırakmaya çalışıyorum. Her şey yolunda, bu hariç.Anında aramada ajax çağrılarının sayısını azaltın
var timeOut;
$('#search input[name=\'search\']').on('keyup', function(e) {
// If enter - submit the search field
if (e.keyCode == 13) {
$('header input[name=\'search\']').parent().find('button').trigger('click');
}
// Call only when length is at least 2 and the key pressed is alphanumeric
else if ($('#search input[name=\'search\']').val().length>2 && ((e.keyCode>=65 && e.keyCode<=90) || (e.keyCode>=97 && e.keyCode<=122))) {
timeOut = null;
//alert(timeOut);
if (!timeOut) {
timeOut = setTimeout(function() {
$.ajax({
url: 'ajax.php',
type: 'post',
async: false,
data: 'ACTION=SEARCH&search='+$('#search input[name=\'search\']').val(),
dataType: 'json',
beforeSend: function() {
$('#loader-icon').show();
},
complete: function() {
$('#loader-icon').hide();
},
success: function(json) {
//$('.product-list-row').html(json);
$('#search-listing').html(json['html']);
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
timeOut = null;
}, 500);
}
}
});
Sorun 1: My komut ben hiç beklendiği gibi setTimeOut
çalışmıyor nedense, sunucuyla çok sayıda çağrı yapmaya biter. Ajax çağrısı, sadece kullanıcı her şeyi yazdığında ya da böyle bir şey yaptığında yapılmalıdır.
Sorun 2: Herhangi bir nedenle hızlı yazdığımda giriş çubuğu düzenlenemiyor. Ajax, ancak son metinsel giriş ile çalışır.
Önceki çalışan zaman aşımını temizlemek için 'clearTimeout (timeOut); –
Tüm kodu okumadım, ama gördüğüm ilk büyük sorun şu ki, 'timeOut = null' mevcut zaman aşımınızı iptal etmiyor, sadece referans değişkenini null olarak ayarlar. Bunun yerine 'clearTimeout (timeOut)' demek zorundasınız. – lexith
"clearTimeout (timeOut)' olarak değiştirirseniz, çalışmayı durdurur. – abhig10