Mam problem, gdy przesyłam formularz, wszystkie aktywne żądania ajax kończą się niepowodzeniem, co powoduje zdarzenie błędu.
Jak zatrzymać wszystkie aktywne żądania ajax w jQuery bez zdarzenia błędu wyzwalania?
Za każdym razem, gdy tworzysz żądanie ajax, możesz użyć zmiennej do jej przechowywania:
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){}
});
Następnie możesz przerwać żądanie:
request.abort();
Możesz użyć tablicy śledzącej wszystkie oczekujące żądania ajax i przerwać je w razie potrzeby.
Poniższy fragment kodu pozwala zachować listę ( pulę ) żądań i przerwać je wszystkie w razie potrzeby. Najlepiej umieścić w
<HEAD>
pliku HTML, zanim zostaną wykonane inne wywołania AJAX.źródło
Object doesn't support property or method 'indexOf'
? Podejrzewam, że może to być stackoverflow.com/a/2608601/181971, a może po prostu zmienić na stackoverflow.com/a/2608618/181971 ?Korzystanie z ajaxSetup jest nieprawidłowe , jak zaznaczono na stronie dokumentu. Ustawia tylko wartości domyślne, a jeśli niektóre żądania zastąpią je, nastąpi bałagan.
Jestem spóźniony na imprezę, ale tylko w celu odniesienia w przyszłości, jeśli ktoś szuka rozwiązania tego samego problemu, oto moje podejście, inspirowane i w dużej mierze identyczne z poprzednimi odpowiedziami, ale bardziej kompletne
źródło
Oto, czego aktualnie używam, aby to osiągnąć.
Uwaga: _.each underscore.js jest obecny, ale oczywiście nie jest konieczny. Jestem po prostu leniwy i nie chcę go zmieniać na $ .each (). 8 P.
źródło
aboutAll
powinien usunąć elementy z tablicy. Ponadto po zakończeniu żądania powinno ono zostać usunięte z listy.Nadaj każdemu żądaniu xhr unikalny identyfikator i zapisz odwołanie do obiektu w obiekcie przed wysłaniem. Usuń odwołanie po zakończeniu żądania xhr.
Aby anulować wszystkie żądania w dowolnym momencie:
Zwraca unikalne identyfikatory anulowanego żądania. Tylko do celów testowych.
Funkcja pracy:
Zwraca obiekt z pojedynczą funkcją, którego można użyć, aby w razie potrzeby dodać więcej funkcji.
źródło
Uznałem, że jest to zbyt łatwe do wielu żądań.
krok 1: zdefiniuj zmienną na górze strony:
krok 2 : ustaw wcześniej Wyślij we wszystkich żądaniach ajax:
krok 3: użyj go, gdziekolwiek potrzebujesz:
źródło
Rozszerzyłem odpowiedź mkmurray i SpYk3HH powyżej, aby xhrPool.abortAll mógł przerwać wszystkie oczekujące żądania danego adresu URL :
Użycie jest takie samo, z tym wyjątkiem, że abortAll może teraz opcjonalnie zaakceptować adres URL jako parametr i anuluje tylko oczekujące połączenia z tym adresem URL
źródło
Miałem pewne problemy z kodem Andy'ego, ale dało mi to świetne pomysły. Pierwszym problemem było to, że powinniśmy usunąć wszystkie obiekty jqXHR, które zostały pomyślnie ukończone. Musiałem także zmodyfikować funkcję abortAll. Oto mój końcowy działający kod:
Nie podobało mi się robienie rzeczy ajaxComplete (). Bez względu na to, jak próbowałem skonfigurować .ajaxSetup, to nie działało.
źródło
Zaktualizowałem kod, aby działał dla mnie
źródło
Wrzucam kapelusz. Oferty
abort
iremove
metody przeciwkoxhrPool
tablicy, i nie jest podatny na problemy zajaxSetup
przesłonięciami.źródło
Utwórz pulę wszystkich żądań ajax i przerwij je .....
źródło
Lepiej używać niezależnego kodu .....
źródło
Równie ważne: powiedz, że chcesz się wylogować i generujesz nowe żądania za pomocą timerów: ponieważ dane sesji są odnawiane przy każdym nowym bootstrapie (może możesz powiedzieć, że mówię Drupal, ale może to być każda strona, która używa sesji). Musiałem przejść przez wszystkie moje skrypty z wyszukiwaniem i zamianą, ponieważ miałem mnóstwo rzeczy uruchomionych w różnych przypadkach: zmienne globalne u góry:
źródło
za każdym razem, gdy chcesz przerwać wszystkie żądania ajax, wystarczy wywołać tę linię
źródło
Istnieje fałszywe rozwiązanie, którego używam do przerywania wszystkich żądań ajax. To rozwiązanie powoduje przeładowanie całej strony. To rozwiązanie jest dobre, jeśli nie chcesz przypisywać identyfikatora do każdego żądania ajax i jeśli tworzysz żądania ajax w pętli for. Dzięki temu wszystkie żądania ajax zostaną zabite.
źródło
Oto jak podłączyć to za pomocą dowolnego kliknięcia (przydatne, jeśli twoja strona zawiera wiele wywołań AJAX i próbujesz nawigować dalej).
źródło