2015-03-18 7 views
9

XMLHttpRequest.status è in genere solo '0' se si è verificato un errore di tipo di rete durante il tentativo di effettuare una chiamata Ajax/XMLHttpRequest. Ma sicuramente dovrebbe esserci un modo per dire all'utente esattamente quale fosse l'errore di rete, ad es. se la risoluzione DNS non è riuscita o se la connessione è stata rifiutata attivamente o se la connessione è stata stabilita, ma è stata interrotta prima che fosse inviata una risposta HTTP valida? I.E. almeno stampa alcune informazioni extra nella console JavaScript, ad es.Come visualizzare l'errore di rete effettivo all'utente quando si utilizza XMLHttpRequest?

SCRIPT7002: XMLHttpRequest: Rete 0x2efd Errore, Impossibile completare l'operazione a causa di errore 00002efd.

ma non è certo molto cordiale, e non riesco a vedere come interrogare queste informazioni da javascript per tradurre in qualcosa che posso mostrare all'utente.

Non importa se deve essere attuato in modo diverso per i diversi browser, ma sto lottando per vedere alcun modo di andare a prendere in queste informazioni a tutti al momento.

BTW come minimo avrei voluto essere in grado di distinguere:

  • a) senza connessione a Internet (ad esempio wifi scollegato)
  • b) mancata DNS (non può risolvere il nome)
  • c) non ha potuto stabilire una connessione TCP al server (sia attivamente rifiutato o scaduta)
  • d) risposta non valida (non una risposta HTTP)
  • e) fallimento certificato SSL

In ogni caso in cui viene restituita una risposta HTTP valida, ma non è stato 200 OK, va bene - posso ottenere un messaggio di errore ragionevole per visualizzare all'utente. Ma per qualsiasi altra cosa non sembra essere un modo per distinguere i vari tipi possibili di errori. Nella mia applicazione l'utente è responsabile della fornitura dell'indirizzo per fare richieste Ajax, quindi se sbagliano voglio essere in grado di dire loro perché la richiesta non va a buon fine.

+0

è possibile ottenere tabelle di codici HTTP, il resto dovrebbe venire dal server. o una tabella dei codici del browser ... – dandavis

+0

Non sto parlando di codici HTTP, sto parlando di quando non viene restituita alcuna risposta HTTP. Potrebbe esserci un errore di rete, un errore SSL o qualche altro errore di configurazione. Dalla lettura delle specifiche sembra che, se usato in modalità * sincrona *, venga generata un'eccezione NetworkError che potrebbe almeno fornire ulteriori dettagli, ma non riesco a vedere come ottenerla in modalità asincrona. –

+2

purtroppo, non è possibile ottenere molte informazioni di errore da ajax stesso. stai davvero facendo 5 domande, come determinare ciascun proiettile. A: se (! Navigator.onLine) alert ("no net"); B. ajax location.href o "/" per determinare (fornito net funziona). C. xhr.onloadend/onerror può catturare, D. dovrebbe apparire come un tipico errore CORS, E. mostrerà un brutto messaggio spaventoso all'utente, o assomiglia ad un errore CORS ... – dandavis

risposta

0

È meglio che scava nel caso onerror di istanza di XMLHttpRequest

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

Può in qualche modo difficile giudicare ciò che avviene l'esatto tipo di errore, basta provare controllare e.Message o qualcos'altro.

Si noti che un codice di stato! = 200 non attiva l'evento onerror ma l'evento onload. maneggiarlo con cura

Problemi correlati