try-catch не работает с XMLHTTPRequest

Я пытаюсь использовать инструкции try-catch для обработки ошибок из XMLHTTPRequest, как 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 не была вызвана. Любая идея, как это исправить?

Благодарю!

Ответ 1

Я думаю, что вы не можете поймать серверные ошибки таким образом. вы должны проверить код состояния:

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);

Ответ 2

Когда была ошибка 401, брошенная xhr.sendMultipart

Это не было брошено. Он был возвращен асинхронно.

Это означает, что этот код заканчивается до того, как будет получен ответ. Это то, что означает true в вашем open вызове.

Вам нужно зарегистрировать обработчик onReadyStateChange и обрабатывать ответы об ошибках.