2015-03-18 32 views
9

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.

+0

można uzyskać tabele kodów HTTP, reszta powinna pochodzić z serwera. lub tabelą kodów przeglądarki ... – dandavis

+0

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. –

+2

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

Odpowiedz

0

Lepiej kopać w onError przypadku instancji XMLHttpRequest

xhr.onerror = function(e) { 
    if(e matches stuation 1) { 
     console.log('no internet connectivity (e.g. wifi disconnected)'); 
    } else { 
     //...other conditions 
    } 
}; 

Może jakoś trudno jest ocenić, jaki dokładnie typ błędu występuje, po prostu spróbuj sprawdzić e.message lub coś innego.

Należy zauważyć, że kod stanu! = 200 nie wywoła zdarzenia onerror, ale zdarzenie onload. obsłużyć go ostrożnie

Powiązane problemy