Подтвердить что ты не робот

Добавить пользовательский HTTP-заголовок для всех запросов JQuery AJAX

Точка уточнения: у меня нет проблем с добавлением настраиваемого заголовка в мой jQuery-вызов ajax, я хочу, чтобы мой пользовательский заголовок был добавлен ко всем вызовам ajax автоматически.

Если вы посмотрите jquery $.ajax custom head headers issue (не мой вопрос), вы увидите довольно хороший пример того, как работает код если они выполняются вручную для каждого вызова ajax.

Я хотел бы переопределить beforeSend для всех вызовов jQuery ajax. Согласно документации jQuery, я могу это сделать, используя jQuery.ajaxSetup(), но есть предупреждение о том, что вы, вероятно, не должны, может вызывают неожиданное поведение, все это. Для глобальных обратных вызовов такого типа они предлагают использовать .ajaxStart(). . ajaxStart() выглядит великолепно, за исключением того, что он не предоставляет XHR, поэтому я могу добавить заголовок.

Должен ли я просто добавить beforeSend с помощью ajaxSetup? Есть ли способ получить доступ к XHR из ajaxStart? Другие варианты?

4b9b3361

Ответ 1

Предварительным фильтром был бы простой способ сделать это:

$.ajaxPrefilter(function( options ) {
    if ( !options.beforeSend) {
        options.beforeSend = function (xhr) { 
            xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE');
        }
    }
});

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

Обратите внимание, что вы можете выполнить ту же цель, используя ajaxSetup. единственная причина, по которой это предупреждение, заключается в том, что использование этого параметра повлияет на все запросы ajax (как и мой метод), что может привести к нежелательным результатам, если конкретному запросу не нужна эта опция. Я бы посоветовал просто использовать ajaxSetup, вот что он там в конце концов.

Ответ 2

Вы можете использовать глобальное событие ajax ajaxSend()

$( document ).ajaxSend(function( event, jqxhr, settings ) {
    jqxhr.setRequestHeader(name, value)
});

Демо: Fiddle