将Authorization标头附加到Ajax请求的正确方法是什么?

Phi*_*ler 5 ajax jquery authorization web-services knockout.js

我有一个ajax GET请求我在Knockout代码的一部分中触发,我需要确保设置Authorization标头.

我的偏好通常是使用jQuery简写方法,如下所示:

$.getJSON("/api/business", function (allData) {
    var mappedOrgs = $.map(allData, function (item) { return new Business(item) });
    self.businesses(mappedOrgs);
});
Run Code Online (Sandbox Code Playgroud)

没有任何身份验证要求,这本身就没问题,但如果我需要包含持票人令牌,我一直在尝试更冗长的方式:

var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
    headers.Authorization = 'Bearer ' + token;
}

$.ajax({
    type: 'GET',
    url: '/api/business',
    headers: headers
}).done(function (data) {
    var mappedOrgs = $.map(data, function (item) { return new Business(item) });
    self.businesses(mappedOrgs);
}).fail(function () { console.error('api call failed'); });
Run Code Online (Sandbox Code Playgroud)

即使试图通过$ .ajaxSend()方法强制解决问题也不会产生任何结果.

$(document).ajaxSend(function (event, xhr, settings) {
    var token = sessionStorage.getItem(tokenKey);
    var headers = {};
    if (token) {
        console.info("Found token. Attaching to headers.");
        headers.Authorization = 'Bearer ' + token;
        settings.headers = headers;
        //console.info(headers);
    }
});
Run Code Online (Sandbox Code Playgroud)

那我在俯瞰什么?我正在检查Fiddler中的每个请求,并且永远不会附加Auth标头.显然有一种正确的方法可以做到这一点,但我在某个地方错过了一步.任何帮助赞赏.

dav*_*der 4

我使用以下内容:

function getListData(url) {
    var d = new $.Deferred();
    cfg.apiLoad();

    $.ajax({
        url: baseUrl + url,
        type: 'GET',
        headers: { "x-access-token": secure.getToken(), "x-access-finger": finger.getFinger() },
        dataType: 'json'
    }).fail(function(a, b, c) {
        cfg.failError(c);
        d.reject(c);
    }).done(function (r) {
        cfg.apiDone(r);
        d.resolve(r.ListResults);
    });

    return d.promise();
}
Run Code Online (Sandbox Code Playgroud)

您可以根据需要添加任意数量的额外标头,忽略 cfg。东西,但这是在网络文件中,就像一次写入一样,使用 everywere
getListData('/api/Name/Endpoint').then(function(r){ '// do something});

然后,这解决了必须重复等的任何问题,并且像一个魅力一样工作。我的 API 对于任何类型的结果都会返回相同的模型