我有一个ajax GET请求我在Knockout代码的一部分中触发,我需要确保设置了Authorization标头。
我的偏好通常是使用像这样的jQuery简写方法:
$.getJSON("/api/business", function (allData) {
var mappedOrgs = $.map(allData, function (item) { return new Business(item) });
self.businesses(mappedOrgs);
});
没有任何身份验证要求,这本身就没问题,但如果我需要包含持票人令牌,我一直在尝试更加冗长的方式:
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'); });
即使尝试通过$ .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);
}
});
那我在俯瞰什么?我正在检查Fiddler中的每个请求,并且永远不会附加Auth标头。显然有一种正确的方法可以做到这一点,但我在某个地方错过了一步。任何帮助表示赞赏。
答案 0 :(得分:3)
我使用以下内容:
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();
}
你可以在那里添加你想要的额外标题,忽略cfg。东西,但这是在一个网络文件中,如在写一次,使用每一个与
getListData('/api/Name/Endpoint').then(function(r){ '// do something});