try-catch不适用于XMLHTTPRequest

cha*_*ang 18 javascript xmlhttprequest try-catch

我试图使用try-catch语句来处理错误XMLHTTPRequest,如下所示:

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

当抛出401错误时xhr.sendMultipart,error_handle_function没有被调用.知道如何解决这个问题吗?

谢谢!

Jos*_*eph 26

我认为你不能以这种方式捕获服务器错误.你应该检查状态代码:

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);
Run Code Online (Sandbox Code Playgroud)

  • Chrome 仍然在控制台中抛出错误,然后调用处理程序。 (2认同)

Mik*_*uel 6

当xhr.sendMultipart抛出401错误时

它没有被抛出.它以异步方式返回.

这意味着此代码在响应到达之前完成运行.这就是true你的open电话意味着什么.

您需要注册一个onReadyStateChange处理程序并在那里处理错误响应.