2012-05-05 56 views
12

我试图使用try-catch语句从XMLHTTPRequest处理这些错误,如下面的工作:的try-catch不使用XMLHttpRequest

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

当有一个401错误由xhr.sendMultipart抛出,error_handle_function是不叫。任何想法如何解决这个问题?

谢谢!

回答

19

我认为你不能赶上服务器错误的方式。你应该检查状态代码,而不是:在Chrome并尝试

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

如果安装[Web服务器通知(https://chrome.google.com/webstore/detail/web-server-notifier/najdkmbedaehkepolllmpdfccdgooajh)例如,去play.google.com,你会看到一个普通的404错误,我甚至无法阻止检查状态码。任何想法为什么? – cregox

+0

在第3行,xmlhttp对象从哪里来? –

+0

“由高尔夫工作!”..大拇指它.. –

5

当有一个401错误由xhr.sendMultipart

这不是抛出异常。它是异步返回的。

这意味着,该代码运行完成后,响应到达之前。这就是你open通话true手段。

你需要注册一个onReadyStateChange处理程序和处理存在的错误响应。