Czy jest jakiś łatwy sposób, aby zrezygnować z wszystkich zaległych żądań AJAX jQuery? Moja aplikacja jest w stanie wyciągnąć wiele równoczesnych żądań, więc wyścig staje się problematyczny. Wprowadziłem hackowe rozwiązania (mianowicie umieszczenie flagi, która jest sprawdzana po zakończeniu żądania), ale byłoby znacznie ładniej, aby uzyskać globalne zatrzymanie wszystkich zaległych zleceń.jQuery porzucenie wszystkich zaległych żądań AJAX
Odpowiedz
Przypisywanie każdy ajax żądanie jako element tablicy:
var requests = [];
requests.push($.ajax({
type: 'POST',
url: '...',
success: successfunc
});
);
I zabić:
$.each(requests, function(i, v) {
v.abort();
});
Powiedziałbym przechowywać wszystkie żądania ajax w tablicy. Kiedy musisz zabić, po prostu przeprowadź pętlę przez wszystkie wartości w tablicy i wywołaj abort(). Gdy żądanie zostanie zakończone lub przerwane, po prostu wyskocz z tablicy.
XMLHttpRequest ma funkcję abort(). $ .ajax pozwala uzyskać dostęp do obiektu xhr. zachowaj rejestr wszystkich zaległych Xhr i przejdź xhr.abort()
dla każdego, który chcesz zakończyć.
jak mówili inni, użyj metody .abort(). Jednak TYLKO działa na połączenia w tej samej domenie. gdy wchodzisz w połączenia międzymiejscowe (z jsonp), wtedy metoda .abort() jest delegowana do wartości null, więc w rzeczywistości nie uruchomi się.
Warto zauważyć, jak to sprawiało mi niekończące czas debugowania wiele mały księżyc temu :)
jim
Fajna informacja, dzięki za te heads up . – Anders
anders - pleasure ... (sprawdź najnowszy status na IE, ponieważ był to głównie XMLHttpRequest w IE, który był problemem przy próbie uczynienia z niego przeglądarki agnostycznej w moim przypadku). Wydaje mi się, że pamiętam, że przerwanie "timeout" jest ustawione na 0 w wywołaniach x-site. w każdym razie .. :) –
oparciu o rozwiązania Kena Redler jest, kładę to w moim inicjalizacji:
window.requests = []
$.ajaxSetup({
beforeSend: function(xhr){
var new_request_list = [xhr]
$.each(window.requests, function(k,v){
if(v.readyState != 4) new_request_list.push(v)
})
window.requests = new_request_list
}
})
I wstawić fragment kodu z new_request_list
tylko po to, aby zmienna globalna nie była wypełniona wypełnionymi obiektami XHR.
Chciałbym umieścić funkcję oczyszczania w '$ .ajaxSetup' lub' xhr.onreadystatechange', ale jestem zaniepokojony, że to przeszkadzałoby w cokolwiek jQuery robi na własną rękę. To rozwiązanie wydaje się działać dobrze. –
Znalazłem na jsfiddle. Jest to w większości takie samo, jak powyżej, z wyjątkiem tego, że usunie wszystkie żądania po ich ukończeniu. Powyższe rozwiązania tylko dodają do tablicy. Więc z biegiem czasu może stać się ogromna, jeśli wykonujesz wiele wywołań ajaxowych. Dzwonisz pod numer $.xhrPool.abortAll();
, gdy chcesz przerwać wszystkie zaległe żądania.
// $.xhrPool and $.ajaxSetup are the solution
$.xhrPool = [];
$.xhrPool.abortAll = function() {
$(this).each(function(idx, jqXHR) {
jqXHR.abort();
});
$.xhrPool = [];
};
$.ajaxSetup({
beforeSend: function(jqXHR) {
$.xhrPool.push(jqXHR);
},
complete: function(jqXHR) {
var index = $.xhrPool.indexOf(jqXHR);
if (index > -1) {
$.xhrPool.splice(index, 1);
}
}
});
- 1. Wiele żądań AJAX w jQuery
- 2. Bezpieczeństwo żądań AJAX
- 3. Łańcuchy żądań ajax z jQuery odroczone
- 4. Ograniczanie jQuery i kolejkowanie żądań AJAX
- 5. Anulowanie żądań AJAX podczas lotu za pomocą Jquery .ajax?
- 6. Grzeczna częstotliwość żądań AJAX?
- 7. Debugowanie żądań AJAX
- 8. Ustawienia domyślne dla wszystkich wywołań ajax jQuery
- 9. jQuery Odroczona - oczekiwanie na wiele żądań AJAX, aby zakończyć
- 10. Zadzwoń do żądań Ajax jQuery Każda X minut
- 11. Otrzymywanie błędu 400 nieprawidłowych żądań w Jquery Ajax POST
- 12. Znak Ampersand (&) wewnątrz wartości opcji danych żądań jQuery AJAX
- 13. Jak czekać na zakończenie zagnieżdżonych żądań asynchronicznych jQuery AJAX?
- 14. Czasami interakcje użytkownika powodują utratę żądań ajax jQuery w UIWebView
- 15. Posta CakePHP ajax powraca 400 złych żądań
- 16. Filtr serwletów dla wszystkich żądań
- 17. Wiele żądań AJAX opóźnia się nawzajem
- 18. Autoryzacja nagłówka jQuery AJAX
- 19. jQuery ajax i SSL?
- 20. LocalStorage, kilka żądań Ajax lub ogromne żądanie Ajax?
- 21. Wykrywanie żądań AJAX w przeglądarce (strona klienta)
- 22. Kilka żądań Ajax w tym samym czasie
- 23. Zapobieganie buforowaniu przez Chrome żądań AJAX
- 24. Jquery $ get/$ ajax nie działa we wszystkich przeglądarkach
- 25. jquery ajax() asynchroniczny fałszywe
- 26. Dodaj nagłówek do wszystkich wychodzących żądań CXF
- 27. Niestandardowy nagłówek AngularJS $ http dla wszystkich żądań
- 28. Zapisywanie wszystkich żądań z modułu python-request
- 29. Wypalanie zwrotna po wielokrotnych żądań AJAX są kompletne
- 30. Przerwij wszystkie żądania jQuery AJAX na całym świecie
Dzięki. Wydaje się, że to się udało. Wybrałem nieco inną implementację, którą szczegółowo opisuję [tutaj] (http://stackoverflow.com/questions/3313059/jquery-abandon-all-outstanding-ajax-requests/3313954#3313954) –