2013-08-23 23 views
5

Aktualnie korzystam z narzędzia do pobierania adresów w bazie danych przy naciśnięciu klawisza zdarzenia jQuery. Gdy tekst zostanie utracony, anuluję wszystkie oczekujące żądania, aby uniknąć pojawienia się menu po ukończeniu wprowadzania danych przez użytkownika. Wszystko działa poprawnie, ale, aby zakończyć I Wyślij ostateczną prośbę ajax, aby przejść do następnego kroku mojego formularza. Ta prośba jest znacznie wolniejsza, niż wcześniej anulowałem wszystkie te żądania. Nie rozumiem, dlaczego anulowane żądanie nie powinno wpłynąć na oczekującą (i jestem pewien, że zostały anulowane, patrząc na kartę sieci w narzędziach chrome). Używam tego kodu:Żądanie ajax jQuery anulowane spowalnia bieżące żądanie

jQuery.xhrPool = []; 
jQuery.xhrPool.abortAll = function() { 
    jQuery(this).each(function(idx, jqXHR) { 
     jqXHR.abort(); 
     jQuery('.loader').hide(); 
    }); 
}; 

jQuery.ajaxSetup({ 
    beforeSend: function(jqXHR) { 
     jQuery.xhrPool.push(jqXHR); 
    }, 
    complete: function(jqXHR) { 
     var index = jQuery.xhrPool.indexOf(jqXHR); 
     if (index > -1) { 
      jQuery.xhrPool.splice(index, 1); 
     } 
    } 
}); 

jQuery('#my_input').blur(function(){ 
    jQuery.xhrPool.abortAll(); 
}); 

Chyba tam trik optymalizacja nie dostanę. Dzięki za pomoc.

+0

Jeśli ich nie anulowałeś, czy opóźnienie nadal istnieje? –

+0

Jest to znacznie wolniejsze niż wtedy, gdy je anuluję. – M4nch4k

+0

A co, jeśli wysłałeś tę prośbę bez uprzedniego wysłania któregoś z tych, które anulujesz? Podejrzewam, że anulowane żądania nie mają nic wspólnego z długością czasu, w którym występują problemy. –

Odpowiedz

3

Pamiętaj też, że otwarcie żądania AJAX do serwera, a następnie anulowanie żądania nie spowoduje anulowanie żądanie przetworzenia na serwerze, po prostu zatrzymuje przeglądarkę od odsłuchania odpowiedzi. Serwer będzie kontynuował przetwarzanie wszelkich rozłączonych żądań ajaxowych, dopóki nie skończą one działać, i wtedy próbuje wysłać odpowiedź do klienta i znaleźć, że nikt nie słucha, umiera.

+1

To świetny punkt, i będzie tak, jeśli język po stronie serwera będzie obsługiwał sesje podobne do tego, jak robi to php. –

+0

Pamiętaj także, że ograniczenia dotyczące żądań AJAX przez przeglądarkę mogą oznaczać, że jeśli wykonasz cztery żądania, a ostatnie żądanie będzie piąte, w zależności od ograniczeń przeglądarki, piąta prośba będzie zawieszona, dopóki jedna z pozostałych czterech nie zostanie ukończona. – Mark

Powiązane problemy