ajaxSetup(beforeSend不工作

时间:2013-10-14 13:55:34

标签: jquery ajax header

登录远程aPI服务器并获取access_token后,我尝试为所有后续的ajax调用设置授权标头:

      .done(function (result) {
         console.log("GOT AUTHORIZATION");
         amplify.store( "tokens", { access_token: result.access_token, refresh_token: result.refresh_token, token_type: result.token_type, expires_in: result.expires_in });
         var authorization = 'Bearer ' + amplify.store( "tokens" ).access_token;
         console.log(authorization);

         $.ajaxSetup({
             beforeSend: function(xhr) {
                 xhr.setRequestHeader('Authorization', authorization);
             }
         });
在控制台上我可以看到:

GOT AUTHORIZATION login.js:34
Bearer 6b7578772fbb4178793100651f2234de840237fe

但后续的ajax调用都没有得到正确的标头集:

https://macmini.local:8000/Categories?_=1381758170726 

无法成功,因为在标头(服务器控制台..)中找不到access_token

{ code: 400,
   error: 'invalid_request',
   error_description: 'The access token was not found',stack: undefined }
saveAccessToken: 6b7578772fbb4178793100651f2234de840237fe, client_id: 1234567890, user_id: 1

我试图修改ajax调用中的标题,任何成功

2 个答案:

答案 0 :(得分:15)

更新答案

从jQuery 1.5开始.ajax支持headers属性

$.ajax({
    url: "http://fiddle.jshell.net/favicon.png",
    headers: {
        'Authorization': authorization
    }
})
.done(function( data ) {
    if ( console && console.log ) {
        console.log( "Sample of data:", data.slice( 0, 100 ) );
    }
});

注意:authorization变量应该在此调用之前的某处设置


旧答案

$(function(){
    $.ajaxSetup({
        beforeSend: function(xhr) {
                 xhr.setRequestHeader('Authorization', authorization);
             }
    });
});

要使ajaxSetup正常工作,您需要在document.ready中调用它。

答案 1 :(得分:0)

我知道这是一个古老的问题,但是我来自Google,认为其他搜索相同内容的人应该有一个可行的解决方案。我已经尝试了建议的答案,但是它对我不起作用。

解决我问题的一种方法是直接在$.ajaxSend内的xhr对象中设置标头:

$(document).ajaxSend(function(ev, xhr, settings) {
  xhr.setRequestHeader('Authorization', `Bearer ${localStorage.getItem(AUTH_TOKEN)}`);
  xhr.setRequestHeader('X-Marketplace', localStorage.getItem('marketplace'));
});

您应该在document.ready中调用它,以使ajaxSend正常工作。

类似的question帮助了我。