2015-05-24 14 views
6

Bsicamente ho avuto la necessità di creare un oggetto APP javascript, che accodare una sequenza di richieste asincroni per il server, elaborare la risposta a JSON e registrare gli errori da esso.Catch a 404 error per XHR

Gli errori di elaborazione JSON sono stati facilmente rilevati con "try-catch", ma gli errori del server come 404, 500 ecc. Sono ancora visualizzati nella console del browser, mentre ho bisogno di registrarlo silenziosamente in "APP.history".

Ho provato a implementarlo tramite il codice riportato di seguito, ma nessuno degli errori 404 si attiva. Che cosa sto facendo di sbagliato?

xhr = new XMLHttpRequest(); 
xhr.open("GET", url, true) 
xhr.onerror = function(){console.log("error")} 
xhr.upload.onerror = function(){console.log("error")} 

A proposito, come è possibile farlo con jQuery AJAX? Stato

+0

È possibile controllare il valore 'xhr.status'. Vedi http://stackoverflow.com/questions/10931270/capture-404-status-with-jquery-ajax – JanSc

+0

dai uno sguardo qui> http://stackoverflow.com/questions/1442425/detect-xhr-error-is- veramente-dovuto-per-browser-stop-o-clic-per-nuova-pagina, spero che risponda alla tua domanda – DKanavikar

risposta

-2

A 404 non si innescherà xhr.onerror()

La soluzione è quella di utilizzare il gestore loadend(), questo incendi non importa cosa, allora si può verificare lo stato.

xhr = new XMLHttpRequest(); 
xhr.open("GET", url, true); 

xhr.onloadend = function() { 
    if(xhr.status == 404) 
     throw new Error(url + ' replied 404'); 
} 
+2

il punto non è mostrare lo stato di errore, non è un problema. Il problema è quello di cath 404 e gestire la console per non mostrarla all'utente. Questa APP JavaScrip è solo una piccola parte della pagina, quindi WINDOW.ONERROR è una soluzione troppo massiccia))) – Tesmen

+2

ma in questo caso la console del browser riporta "GET site.com/page.htm 404 (non trovato)" comunque, ho ragione ? – Tesmen

+0

Tecnicamente un 404 è un CODICE che non è di per sé un errore ... devi usare onloadend per rivedere il codice e analizzare correttamente lo stato 404 come errore – Erick

21

Recentemente ho dovuto risolvere questo problema da solo. Uno stato 404 non attiverà xhr.onerror() perché tecnicamente non è un errore, poiché la risposta è stata completata (la stessa 404 è una risposta).

La mia soluzione era quella di utilizzare il gestore loadend(), che spara non importa cosa, quindi controllare lo stato di 404, o qualsiasi stato che ti interessa.

xhr = new XMLHttpRequest(); 
xhr.open("GET", url, true); 

xhr.onloadend = function() { 
    if(xhr.status == 404) 
     throw new Error(url + ' replied 404'); 
} 

Lo stesso metodo esiste per XMLHttpRequestUpload . Purtroppo, i nostri fornitori di browser non ci consentono di sopprimere programmaticamente gli errori di rete nel 2017. However, networks errors can be suppressed using the console's filtering options.