$.ajaxSetup不起作用

13 浏览
0 Comments

$.ajaxSetup不起作用

我有以下函数来设置我的AJAX请求的头部:

self.authenticate = function () {
    self.token = sessionStorage.getItem(tokenKey);
    var headers = {};
    if (self.token) {
        headers.Authorization = 'Bearer ' + self.token;
        $.ajaxSetup({
            headers: headers
        });
    }
}

但是这不起作用,当我在开发者工具(F12)或Fiddler中检查头部时,我看不到自定义头部,但是当我在请求中设置头部而不是通过ajaxSetup时,它完美地工作。

authenticate函数在Layout页面中被调用:

$(document).ready(function () {
     var avm = new AuthenticationViewModel();
     avm.authenticate();
});

而且self.token不是null

例如,对于这个请求:

self.getUsers = function (callback) {
    $.get("../API/Users/GetUsers/",callback);
}

这些是头部:

enter image description here

我漏掉了什么?

0
0 Comments

问题的原因是将代码放在了错误的位置,解决方法是将代码移动到正确的位置。

0
0 Comments

$.ajaxSetup not working的问题出现的原因是,$.ajaxSetup设置默认值的代码必须在所有依赖这些默认值的ajax调用之前执行。如果调用中没有提到url,那么配置在$ajaxSetup中的默认url将成为调用的url。因此,必须在调用之前执行设置默认值的代码。

解决方法是将设置默认值的代码放在依赖这些默认值的ajax调用之前执行。例如,上面给出的代码中,authenticate函数中的代码必须在getUsers函数中的调用之前执行。

在Plunker中通过查看网络选项卡可以观察到以下现象:

- 如果调用是$.ajax(),则请求头中显示了设置的headers,并且调用的url是在$.ajaxSetup中配置的url。

- 如果调用是$.get(),则请求头中没有显示设置的headers,并且调用的url是Plunker的url,而不是在$.ajaxSetup中配置的url。

因此,为了设置headers,应该使用$.ajax()而不是$.get()。

希望这可以帮助解决问题。

0
0 Comments

$.ajaxSetup函数用于设置全局的Ajax默认选项。可以通过该函数设置默认的headers选项,以在每次Ajax请求中自动添加特定的请求头。

在上述代码中,通过$.ajaxSetup函数设置了headers选项,以添加Authorization请求头。然而,代码中的设置是错误的,应该使用正确的语法来指定headers选项的值。

正确的语法应该是:

headers: { 'Authorization': 'Bearer ' + self.token }

解决方法是修改代码中的$.ajaxSetup函数的参数,将headers选项的值设置为正确的语法。修改后的代码如下:

$.ajaxSetup({
    headers: { 'Authorization': 'Bearer ' + self.token }
});

这样修改后,每次发送的Ajax请求都会自动添加正确的Authorization请求头。

0