web-dev-qa-db-fra.com

Puis-je définir un en-tête global pour toutes les demandes AJAX?

Cela ne semble pas fonctionner:

$.ajaxSetup({
  headers: {
    Accept: 'application/vvv.website+json;version=1 ',
    Authorization: 'Token token=\"FuHCLyY46\"'
  }
});

J'aurais pensé que ce serait le cas. Si j'ajoute ces filtres spécifiquement à mon AJAX alors ils fonctionnent. J'aimerais le faire globalement pour tous les appels AJAX.

24
Trip

J'ai fait des tests supplémentaires et le code que vous avez publié fonctionne parfaitement. Si vous avez des problèmes avec la façon dont les paramètres sont configurés, vous pouvez toujours passer l'appel beforeSend et modifier vous-même la demande xml.

$.ajaxSetup({
    beforeSend: function (xhr)
    {
       xhr.setRequestHeader("Accept","application/vvv.website+json;version=1");
       xhr.setRequestHeader("Authorization","Token token=\"FuHCLyY46\"");        
    }
});
49
John Koerner

Il est également possible de le faire de manière indépendante du framework en corrigeant par singe la méthode ouverte:

var o = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(){
  var res = o.apply(this, arguments);
  var err = new Error();
  this.setRequestHeader('X-Ajax-Stack', JSON.stringify(err.stack));
  return res;
}

Dans cet exemple, j'envoie des informations de trace de pile via un en-tête, ce qui permet au backend de savoir d'où proviennent les demandes Ajax, même si elles proviennent d'un code tiers qui n'utilise pas jQuery.

(Remarque: attention aux en-têtes trop gros )

15
Daniel