【问题标题】:XmlHttpRequest get callback response when request fails请求失败时 XmlHttpRequest 获取回调响应
【发布时间】:2015-10-26 21:01:37
【问题描述】:

我对我的服务提出了一个简单的请求:

 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:unauthorised 但我在回调中没有收到此失败响应,因此 authType 将是未定义的。

我之前没有使用过 javascript,所以问题是即使请求因未经授权而失败,我如何才能在回调中获得响应?

【问题讨论】:

  • XMLHttpRequest.getResponseHeader():第 2 步:“如果设置了错误标志,则返回 null。”
  • 这确实是为什么没有设置响应。目前,我使用了一种解决方法,并将保持问题开放,直到我/有人找到通用解决方案。
  • “通用解决方案”是更改规范,这不太可能:)

标签: javascript callback http-authentication onreadystatechange http-options-method


【解决方案1】:

XMLHttpRequest 有一个可以使用的 onerror 回调:

var request = new XMLHttpRequest();
...
request.onerror = function(){
    if (this.status == 401) {
    } 
} 
...
request.send();

【讨论】: