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 не называлась. Есть идеи, как это исправить?

спасибо!

2 ответов


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

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

когда была ошибка 401, вызванная xhr.sendMultipart

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

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

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