2010-11-08 17 views
6

jQuery's autocomplete kullanıyorum, ancak performansla ilgili bir sorun buldum - eğer 'abc' girdiysem, 'a' ile, 'ab' ile, ve 'abc' ile, bir kerede nasıl tarayacak, nasıl ajax çağrısı 'abc' ile arama yaparken önceki 'a', 'ab' yi durdurabilir miyim?jQuery otomatik tamamlama, Yeni bir tane yükseltdiğimde önceki ajax çağrısının durmasını sağlayabilir miyim?

Benzer durum şudur: jQuery DataTables kullanıyorum ve bazı arama yapmak istiyorum, aramak için bir şey yazdım (arama web yöntemini arayın) ve tıklatılan düğme - 'Ara' bir defada 3 kez veya değişti 'Ara' düğmesini tıklayıp yeni bir arama yaptığımda, önceki işe yaramaz ajax çağrısını nasıl durdurabilirim?

cevap

5

Eğer jQuery UI Autocomplete kullandığınız varsayarak:

  1. Sen başlar aramadan önce dizenin minimum uzunluğu belirleyebilirsiniz. (varsayılan değer 3'tür)
  2. Ayrıca, son tuş vuruşu ve ajax çağrısı arasındaki gecikmeyi de belirleyebilirsiniz. Genellikle 2-300ms yapmalıdır. Bazı şeyleri temizlemenize yardımcı olabilir
  3. AjaxQueue.
12

JQuery en $.ajax doğal yöntemle .abort()

$("#search").autocomplete({ 
    minLength: 3, 
    delay: 300, // this is in milliseconds 
    json: true, 
    source: function(request, response){ 
     // New request 300ms after key stroke 
     var $this = $(this); 
     var $element = $(this.element); 
     var previous_request = $element.data("jqXHR"); 
     if(previous_request) { 
      // a previous request has been made. 
      // though we don't know if it's concluded 
      // we can try and kill it in case it hasn't 
      previous_request.abort(); 
     } 
     // Store new AJAX request 
     $element.data("jqXHR", $.ajax({ 
      type: "POST", 
      url: "foo.php", 
      dataType: "json", 
      success: function(data){ 
       response(data); 
      } 
     })); 
    } 
}); 
+1

mükemmel bir çözüm yoluyla iptal edilebilir bir XMLHttpRequest nesnesi döndüren nasıl (ben ihtiyaç asla), ancak değer bir atış :) bilmem –