XmlHttpRequest получает ответ обратного вызова при сбое запроса

У меня есть простой запрос, который я делаю для своего сервиса:

 var request = new XMLHttpRequest();
    request.open("OPTIONS", url, true);
    request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
    request.setRequestHeader('Accept', 'application/json');

    request.onreadystatechange = function () {
        if (request.readyState != 4) {
            return;
        }

        var authType = request.getResponseHeader("WWW-Authenticate");

        makeRequest(...);
    };

    request.send();
}

Итак, чего я пытаюсь добиться, это позвонить в мою конечную точку, чтобы узнать, какой тип авторизации (базовый или носитель), а затем, когда я получу тип авторизации, я сделаю фактический запрос с соответствующими учетными данными.

Если я делаю запрос вручную, я получаю 401 неавторизованный запрос, что нормально, но я также получаю WWW-Authenticate: Basic... в своих заголовках. Однако, если я выполню этот вызов javascript, он просто завершится с ошибкой 401: unauthorized, но я не получу этот неудачный ответ в своем обратном вызове, поэтому authType будет неопределенным.

Я раньше не использовал javascript, поэтому вопрос в том, как я могу получить ответ в обратном вызове, даже если запрос не выполнен с несанкционированным доступом?


comment
XMLHttpRequest.getResponseHeader(): Шаг 2: Если установлен флаг ошибки, верните ноль.   -  person Andreas    schedule 26.10.2015
comment
Именно поэтому ответ не установлен. На данный момент я использовал обходной путь и буду держать вопрос открытым, пока я/кто-то не найдет общее решение.   -  person Fofole    schedule 27.10.2015
comment
Общим решением было бы изменение спецификации, что маловероятно :)   -  person Andreas    schedule 27.10.2015


Ответы (1)


XMLHttpRequest имеет обратный вызов при ошибке, который вы можете использовать:

var request = new XMLHttpRequest();
...
request.onerror = function(){
    if (this.status == 401) {
    } 
} 
...
request.send();
person Lucas Rodrigues    schedule 26.10.2015