2013-10-14 12 views
7

dopo il login al server Remote API, e ottenere un access_token, cerco di impostare l'intestazione di autorizzazione per tutte le chiamate Ajax successive:ajaxSetup (beforeSend non funziona

 .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); 
      } 
     }); 

su console posso vedere:

GOT AUTHORIZATION login.js:34 
Bearer 6b7578772fbb4178793100651f2234de840237fe 

ma nessuno di chiamate ajax successive ottenere la corretta intestazione set:

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

non può succe Ed in quanto non access_token si trova nell'intestazione (console del server ..)

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

ho cercato di modificare l'intestazione all'interno della chiamata AJAX wo alcun successo

risposta

14

risposta Aggiornato

Come di jQuery 1.5 .ajax supporta headers proprietà

$.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)); 
    } 
}); 

Note: la variabile authorization deve essere impostato da qualche parte prima di questa chiamata


Vecchio risposta

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

Per la ajaxSetup per lavorare è necessario chiamare nel document.ready.

+1

Grazie ... è lavorare in questo modo ... ho trovato anche il modo di fare il beforeSend lavorare all'interno del blocco Ajax chiamata ... Ho dimenticato di aggiungere: async: false .. $ .ajax ('https : //macMini.local: 8000/Categorie, { \t tipo: "GET", \t della cache: false, async: false, \t dataType: "json", beforeSend: function (XHR, impostazioni) { xhr.setRequestHeader ('Authorization', 'Bearer' + amplify.store ("token") .access_token); } }) – erwin

+0

thi s è probabilmente obsoleto, ora puoi semplicemente impostare la proprietà "headers" direttamente in $ .ajax() – MonoThreaded

+0

@MonoThreaded risposta aggiornata, grazie per avermelo fatto notare. Senza di te non lo noterei. – abc123

Problemi correlati