2012-05-05 13 views
12

Sto cercando di utilizzare le dichiarazioni try-catch per gestire gli errori da XMLHTTPRequest, come di seguito:try-catch non funziona con XMLHTTPRequest

var xhr = new XMLHttpRequest(); 
xhr.open('POST', someurl, true); 
try{ 
    xhr.sendMultipart(object); 
} 
catch(err){ 
    error_handle_function(); 
} 

Quando c'era un errore di 401 lanciato da xhr.sendMultipart, il error_handle_function era non chiamato. Qualche idea su come risolvere questo problema?

Grazie!

risposta

19

Penso che non si possano intercettare errori del server in questo modo. si dovrebbe essere il controllo del codice di stato invece:

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange=function() { 
    if (xhr.readyState === 4){ //if complete 
     if(xhr.status === 200){ //check if "OK" (200) 
      //success 
     } else { 
      error_handle_function(); //otherwise, some other code was returned 
     } 
    } 
} 
xhr.open('POST', someurl, true); 
xhr.sendMultipart(object); 
+0

Se si installa [Web Server Notifier] (https://chrome.google.com/webstore/detail/web-server-notifier/najdkmbedaehkepolllmpdfccdgooajh) su Chrome e prova per andare su play.google.com, ad esempio, vedrai un errore 404 normale che non posso impedire neanche prima di controllare il codice di stato. Qualche idea sul perché? – cregox

+0

Sulla riga 3, da dove viene l'oggetto xmlhttp? –

+0

"DA GOLLY HA FUNZIONATO !!" .. pollici in su .. –

5

quando ci fu un errore di 401 lanciata da xhr.sendMultipart

Non è stato gettato. È stato restituito in modo asincrono.

Ciò significa che questo codice termina prima dell'arrivo della risposta. Ecco cosa significa il true nella tua chiamata open.

È necessario registrare un gestore onReadyStateChange e gestire le risposte di errore lì.