XMLHttpRequest.status to zazwyczaj "0", jeśli wystąpił błąd sieciowy podczas próby wykonania połączenia Ajax/XMLHttpRequest. Ale z pewnością powinien istnieć sposób poinformowania użytkownika o tym, jaki był błąd sieci, np. czy rozpoznanie DNS nie powiodło się, czy połączenie zostało aktywnie odrzucone, a nawet czy połączenie zostało nawiązane, a następnie przerwane przed wysłaniem prawidłowej odpowiedzi HTTP? I.E. przynajmniej wypisuje dodatkowe informacje w konsoli JavaScript, np.Jak wyświetlić rzeczywisty błąd sieci dla użytkownika przy użyciu XMLHttpRequest?
SCRIPT7002: XMLHttpRequest: Błąd sieci 0x2efd, Nie można ukończyć operacji z powodu błędu 00002efd.
Ale to bardzo mało przyjazne i nie mogę zobaczyć, jak przesłać te informacje z javascript, aby przetłumaczyć je na coś, co mogę pokazać użytkownikowi.
Nie przeszkadza mi, że trzeba to inaczej zaimplementować w różnych przeglądarkach, ale w tej chwili staram się znaleźć jakiś sposób na pobranie tych informacji.
BTW przynajmniej chciałbym, aby móc odróżnić:
- a) Brak połączenia z Internetem (np wifi odłączony)
- b) awaria DNS (Nie można rozpoznać nazwy)
- c) nie może nawiązać połączenie z serwerem TCP (albo aktywnego odrzucone lub przekroczenie limitu czasu)
- D) odpowiedź na nieważny (nie odpowiedzi HTTP)
- e) brak certyfikat SSL
W każdym przypadku, w którym zwracana jest ważna odpowiedź HTTP, ale nie ma statusu 200 OK, wszystko w porządku - mogę wyświetlić komunikat o błędzie dla użytkownika. Ale cokolwiek innego nie wydaje się być sposobem na rozróżnienie różnych możliwych rodzajów błędów. W mojej aplikacji użytkownik jest odpowiedzialny za dostarczenie adresu, aby zażądać Ajax, więc jeśli źle zrobią, chcę być w stanie powiedzieć im, dlaczego żądanie się nie udaje.
można uzyskać tabele kodów HTTP, reszta powinna pochodzić z serwera. lub tabelą kodów przeglądarki ... – dandavis
Nie mówię o kodach HTTP, mówię o tym, kiedy nie zwrócono odpowiedzi HTTP. Może to być błąd sieciowy, błąd SSL lub inny błąd konfiguracji. Odczytując specyfikację, wydaje się, że jeśli zostanie użyta w trybie * synchronicznym *, zostanie zgłoszony wyjątek NetworkError, który może przynajmniej dostarczyć więcej szczegółów, ale nie mogę zobaczyć, jak uzyskać to w trybie asynchronicznym. –
Niestety, nie można uzyskać wiele informacji o błędach z samego ajax. tak naprawdę zadajesz 5 pytań, jak określić każdy punktor. A: jeśli (! Navigator.onLine) alert ("brak sieci"); B. ajax location.href lub "/" w celu ustalenia (pod warunkiem, że roboty sieciowe). C. xhr.onloadend/onerror może złapać, D. powinien wyglądać jak typowy błąd CORS, E. wyświetli dla ciebie nieprzyjemny przerażający komunikat lub wyglądać jak błąd CORS ... – dandavis