$ .ajaxSetup不起作用

时间:2017-06-12 07:20:05

标签: javascript ajax request-headers

我有以下功能来设置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

这些是标题: enter image description here

我错过了什么?

3 个答案:

答案 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()的调用是urlurl }
  • 如果来电是 $.ajaxSetup ,那么标题不会显示,并且$.get()来电是url网址意味着您的情况将是 plunker 等。
  

http://MySite/ 是最易配置的,您可以获得细粒度   控制HTTP标头等。你也能够直接进入   使用此方法访问XHR对象。略微细粒度   还提供了错误处理。因此可以更复杂   经常不必要,但有时非常有用。你必须处理   通过回调自己返回数据。

     

$.ajax() 只是 $.get() 的缩写,但摘要了一些   配置远,为它设置合理的默认值   隐藏你。将数据返回给回调。它只允许   GET请求也伴随着类似的 $.ajax() 功能   抽象,仅适用于POST

了解更多信息

DIFFERENCE BETWEEN $.ajax() and $.get(), $.post()

如果需要,只需测试一下。

$ .ajax()调用的图片

enter image description here

$ .get()调用的图片

enter image description here

因此,如果您想设置$.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}
       });
   }
}