我有以下功能来设置AJAX
个请求的标头:
self.authenticate = function () {
self.token = sessionStorage.getItem(tokenKey);
var headers = {};
if (self.token) {
headers.Authorization = 'Bearer ' + self.token;
$.ajaxSetup({
headers: headers
});
}
}
但这不起作用,当我检查开发人员收费(F12)或Fiddler中的标头时,我没有看到那里的custon标头,但是当我在请求上设置标头而不是{ {1}}它完美无缺。
在布局页面中调用ajaxSetup
函数:
authenticate
$(document).ready(function () {
var avm = new AuthenticationViewModel();
avm.authenticate();
});
不是self.token
。
例如,对于此请求:
null
我错过了什么?
答案 0 :(得分:5)
$.ajaxSetup为将来的Ajax请求设置默认值。
不建议按照JQuery文档中的建议使用它。
无论如何,因为它设置了将来调用的默认值,它必须在所有依赖于这些默认值的ajax调用之前执行。例如,如果您没有提及呼叫的url
,则url
中配置的默认$ajaxSetup
将是呼叫的url
。如果您所做的调用取决于那些默认值,则此代码
self.authenticate = function () {
self.token = sessionStorage.getItem(tokenKey);
var headers = {};
if (self.token) {
headers.Authorization = 'Bearer ' + self.token;
$.ajaxSetup({
headers: headers
});
}
}
必须在进行以下调用之前执行。
self.getUsers = function () {
$.get("../API/Users/GetUsers/");
}
现在检查一下
*************** Plunker for answer ****************
在该插件中,按 F12 ,转到开发人员控制台中的网络标签,然后检查{{1 }和$.ajax()
在我看到的那个(要阅读的点),
$.get()
,则会显示标题,并且$.ajax()
的调用是url
,url
} $.ajaxSetup
,那么标题不会显示,并且$.get()
来电是url
网址意味着您的情况将是 plunker
等。
http://MySite/
是最易配置的,您可以获得细粒度 控制HTTP标头等。你也能够直接进入 使用此方法访问XHR对象。略微细粒度 还提供了错误处理。因此可以更复杂 经常不必要,但有时非常有用。你必须处理 通过回调自己返回数据。
$.ajax()
只是$.get()
的缩写,但摘要了一些 配置远,为它设置合理的默认值 隐藏你。将数据返回给回调。它只允许 GET请求也伴随着类似的$.ajax()
功能 抽象,仅适用于POST
了解更多信息
DIFFERENCE BETWEEN $.ajax() and $.get(), $.post()
如果需要,只需测试一下。
$ .ajax()调用的图片
$ .get()调用的图片
因此,如果您想设置$.post()
,只需使用headers
代替$.ajax()
希望这会有所帮助:)
答案 1 :(得分:3)
我最后搬家了:
$(document).ready(function () {
var avm = new AuthenticationViewModel();
avm.authenticate();
});
从Layout
页面到页面本身,解决了问题。
AuthenticationViewModel - 创建一个新的AuthenticationViewModel,用于记录用户并获取他们的信息。
答案 2 :(得分:-1)
语法应该像
headers: { 'x-my-custom-header': 'some value' }
即;你可以改写你的功能
self.authenticate = function () {
self.token = sessionStorage.getItem(tokenKey);
if (self.token) {
//headers.Authorization = 'Bearer ' + self.token;
$.ajaxSetup({
headers: {Authorization: 'Bearer ' + self.token}
});
}
}