Pytanie Przerwanie jQuery getJSON XMLHttpRequest


Okazuje się, że to artefakt błędu Firebuga. Żądanie Ajaxa zostało anulowane, ale Firebug kontynuował zgłaszanie go jako aktywnego. Detale tutaj.


Mam długie XMLHttpRequests i muszę być w stanie przerwać je w pewnych okolicznościach.

Ustawiłem żądanie w normalny sposób:

ajax = $.getJSON(url + "?updates", function(data) { ...; });

Później chcę przerwać tę prośbę, wydaje się prosta:

ajax.abort();

Kiedy jednak patrzę w Firebug, widzę, że nadal działa ...

Konsola.loguje wartość ajaxa tuż przed próbą i przerwie go, potwierdza, że ​​ma wartość i XMLHttpRequest (z readyState z 0).

Czy istnieją ograniczenia dotyczące tego, jak i kiedy abort () odpala na XMLHttpRequest?


12
2017-08-17 13:30


pochodzenie


Jaką wersję FF? - Crescent Fresh
Wersja to Linux 3.0.13 - Gordon Guthrie


Odpowiedzi:


Wywołanie przerwania resetuje obiekt; procedura obsługi zdarzenia onreadystatechange zostanie usunięta, a parametr readyState zostanie zmieniony na 0 (niezainicjowany).

nie sądzę, że anuluje to żądanie, po prostu ignoruje jakąkolwiek odpowiedź (manipulując obsługą zdarzeń) - ale tak naprawdę nie wypróbowałem jeszcze tego.

ale z pewnością pozwoli to na ponowne wykorzystanie obiektu - bez względu na to, czy przeglądarka ma nadal wątek pracujący ze starym żądaniem.


2
2017-08-17 13:37



Kogo cytujesz? - Crescent Fresh
Aah! Problem polega na tym, że mam zbyt wiele żądań http i przeglądarka zawiesza się, więc muszę to zakończyć ... - Gordon Guthrie
cytat pochodzi z dokumentu Microsoft javascript. Z tego, jak sądzę, bardzo zależy od implementacji przeglądarki, co dokładnie się dzieje. większość przeglądarek najprawdopodobniej będzie starała się zakończyć z wdziękiem - w ten sposób połączenia mogą jeszcze trwać przez jakiś czas, aż wreszcie zostaną zamknięte - ale to tylko domysły. - Niko


możesz rzucić okiem na JSONP-Plugin Dzięki tej wtyczce masz możliwość ręcznego przerwania żądania. Spójrz też "uwaga ostrzegawcza" w bibliotece technicznej IBM:

Przede wszystkim nie ma obsługi błędów dla wywołań JSONP. Jeśli dynamiczne wstawianie skryptów działa, zostanie wywołany; jeśli nie, nic się nie dzieje. Po prostu nie działa w milczeniu. Na przykład nie można złapać błędu 404 z serwera. Nie możesz też anulować ani ponownie uruchomić żądania.


2
2017-08-17 14:13





Kolejny świetny artykuł na temat radzenia sobie z tym znajduje się tutaj: http://www.bennadel.com/blog/1500-Catching-Timeout-Errors-With-jQuery-Powered-AJAX.htm.

Po prostu konwertowałem moje żądanie .getJSON na .ajax i dodałem obsługę timeout / error.

Dzięki!


2
2018-02-23 16:21





spójrz na jquery AJAX Queue / Cache / Abort / Block Manager, może to pomoże ci zapobiec obecnej sytuacji.


0
2017-08-17 14:12