$.ajaxSetup不起作用
$.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); }
这些是头部:
我漏掉了什么?
$.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()。
希望这可以帮助解决问题。
$.ajaxSetup函数用于设置全局的Ajax默认选项。可以通过该函数设置默认的headers选项,以在每次Ajax请求中自动添加特定的请求头。
在上述代码中,通过$.ajaxSetup函数设置了headers选项,以添加Authorization请求头。然而,代码中的设置是错误的,应该使用正确的语法来指定headers选项的值。
正确的语法应该是:
headers: { 'Authorization': 'Bearer ' + self.token }
解决方法是修改代码中的$.ajaxSetup函数的参数,将headers选项的值设置为正确的语法。修改后的代码如下:
$.ajaxSetup({ headers: { 'Authorization': 'Bearer ' + self.token } });
这样修改后,每次发送的Ajax请求都会自动添加正确的Authorization请求头。