2010-11-08 4 views
6

Używam jQuery's autocomplete, ale znalazłem problem związany z wydajnością - jeśli wprowadzę "abc", będzie to skanowanie według "a", "ab" i "abc", w tym samym czasie czy mogę zatrzymać poprzednie 'a', 'ab', gdy wywołanie ajax wyszukuje według 'abc'?Autouzupełnianie jQuery, czy mogę zatrzymać poprzednie wywoływanie ajax, gdy podniosę nowe?

Podobny przypadek: Używam jQuery DataTables, i chcę zrobić kilka wyszukiwania jak, wpisałem coś do wyszukiwania (metoda wyszukiwania połączenia internetowego), i kliknąłem przycisk - "Wyszukaj" 3 razy na raz, lub zmienione szukaj tekstu tuż po kliknięciu przycisku "Wyszukaj" i przeszukaj nowe wyszukiwanie, w jaki sposób mogę zatrzymać poprzednie niepotrzebne wywoływanie ajaxów?

Odpowiedz

5

Zakładając, że używasz jQuery UI Autocomplete:

  1. Można określić minimalną długość łańcucha przed rozpoczęciem poszukiwania. (domyślnie jest to 3 domyślne)
  2. Możesz również określić opóźnienie między ostatnim naciśnięciem klawisza a wywołaniem ajax. Zwykle powinno to robić 2-300 ms.
  3. AjaxQueue może pomóc w wyczyszczeniu niektórych rzeczy. Wiem jak (nigdy nie jest to potrzebne), ale warto spróbować :)
12

jQuery $.ajax zwraca obiekt XMLHttpRequest, które mogą być anulowane przez jego natywnej metody .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

doskonałe rozwiązanie –