Могу ли я установить глобальный заголовок для всех запросов AJAX?

Это не работает:

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

Я бы подумал, что так будет. Если я добавлю эти фильтры специально для своего вызова AJAX, они будут работать. Я бы хотел сделать это глобально для всех вызовов AJAX.

Ответы

Ответ 1

Я сделал несколько дополнительных тестов, и код, который вы опубликовали, отлично работает. Если у вас есть проблемы с настройкой параметров, вы всегда можете отправить вызов beforeSend и изменить запрос xml самостоятельно.

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

Ответ 2

Это также возможно сделать в рамках-агностическом способе путем обезглавливания открытого метода:

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

В этом примере я отправляю информацию о трассировке стека через заголовок, который позволяет бэкэнду знать, откуда возникли запросы Ajax, даже если это из стороннего кода, который не использует jQuery.

(Примечание: осторожно о заголовках становится слишком большим)

Ответ 3

Ответ beforeSend не устанавливает тот же самый header как добавление header непосредственно к вызову ajax. Поэтому, чтобы jQuery сделал это правильно, я добавляю следующее:

headers: myGlobalHeaders

где myGlobalHeaders - глобальная переменная. К сожалению, я должен написать эту дополнительную строку для каждого вызова ajax. Ужасно! Возможно, я отредактирую структуру jQuery, чтобы справиться с этим.