2013-11-27 13 views
10

Nella console JavaScript di Chrome, se corro questo:Come catturare NetworkError in JavaScript?

var that = new XMLHttpRequest(); 
that.open('GET', 'http://this_is_a_bad_url.com', false); 
that.send(); 

ottengo un errore intenzionalmente previsto:

NetworkError: A network error occurred. 

Voglio prendere questo, per cui uso:

var that = new XMLHttpRequest(); 
that.open('GET', 'http://this_is_a_bad_url.com', false); 
try { 
    that.send(); 
} catch(exception) { 
    if(exception instanceof NetworkError) { 
    console.log('There was a network error.'); 
    } 
} 

Tuttavia, viene visualizzato un errore relativo a NetworkError che non viene definito:

ReferenceError: NetworkError is not defined 

Come posso rilevare NetworkError?

risposta

11

Penso che quello che voleva dire era:

if(exception.name == 'NetworkError'){ 
    console.log('There was a network error.'); 
} 

Non credo l'errore è un esempio di NetworkError, ma gettato in questo modo:

throw { 
    name: 'NetworkError', 
    message: 'A network error occurred.' 
    // etc... 
} 
+1

Questo funziona benissimo. Dovrei anche chiedere: Nella console di JS di Chrome, mostra ancora "GET (url)" con una X rossa a sinistra di esso mentre si calcola l'errore in basso a destra della console. C'è un modo per prendere anche questo? – Synthead

+1

La console di Chrome Afaik mostra tutte le richieste non riuscite in questo modo, la cattura dell'errore impedisce la rottura del codice –

0

Guardare nell'evento onreadystatechange. È possibile ottenere lo stato della risposta.

+2

readystate non cambia fino a quando viene chiamato send(), ma la chiamata send() è ciò che genera l'eccezione. – broofa