2012-05-05 17 views
12

Estoy tratando de utilizar las declaraciones try-catch para manejar los errores de XMLHTTPRequest, como a continuación:try-catch no funciona con XMLHTTPRequest

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

Cuando hubo un error de 401 lanzada por xhr.sendMultipart, el error_handle_function era no llamado ¿Algúna idea de cómo arreglar esto?

Gracias!

Respuesta

19

Creo que no puede detectar los errores del servidor de esa manera. usted debe comprobar el código de estado en su lugar:

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

Si instala [Servidor Web notificador] (https://chrome.google.com/webstore/detail/web-server-notifier/najdkmbedaehkepolllmpdfccdgooajh) en Chrome y tratar para ir a play.google.com, por ejemplo, verá un error 404 normal que no puedo evitar incluso al verificar el código de estado. Alguna idea sobre por qué? – cregox

+0

En la línea 3, ¿de dónde viene el objeto xmlhttp? –

+0

"POR GOLLY IT WORKED !!" .. pulgares hacia arriba .. –

5

cuando se produjo un error de 401 lanzada por xhr.sendMultipart

No fue arrojado. Fue devuelto asincrónicamente.

Eso significa que este código termina de ejecutarse antes de que llegue la respuesta. Eso es lo que significa el true en su llamada open.

Debe registrar un controlador onReadyStateChange y manejar las respuestas de error allí.