Удалить определенные заголовки запросов, заданные в jQuery.ajaxSetup

Я настраиваю некоторые пользовательские заголовки, используя

$.ajaxSetup({
    headers : {
        'x-custom' : 'value'
    }
});

Он добавит заголовок x-custom для всего запроса ajax. Но я хочу, чтобы некоторые конкретные запросы НЕ содержали этот заголовок.

Я пробовал это, удаляю заголовок из ajaxSettings перед этим ajax-вызовом и добавляю его обратно, когда его завершенный

delete $.ajaxSettings.headers["x-custom"];

$.ajax({
    ...
    "success": function (data) {
        $.ajaxSettings.headers["x-custom"] = 'value';
        ...
    }
});

Но я считаю, что это не так, поскольку запрос, который был запущен до завершения этого вызова, не получит этот заголовок. Что еще я могу сделать, пожалуйста, предложите.

Должен ли я добавить заголовок обратно в следующей строке после $.ajax вместо этого в обратном вызове?

Ответ 1

Поскольку у этого вопроса нет ответа, который может быть отмечен как "Принято". Я отправляю решение.

Похоже на добавление назад заголовка сразу после вызова AJAX. Таким образом, мы не будем ждать ответа обратного вызова, а затем добавим его.

delete $.ajaxSettings.headers["x-custom"]; // Remove header before call

$.ajax({
    ...
    "success": function (data) {
        ...
    }
});

$.ajaxSettings.headers["x-custom"] = 'value'; // Add it back immediately

Ответ 2

Вы можете добавить функцию ajaxComplete. Он будет работать после всех ваших запросов ajax и делать все, что вы пожелаете.
Что-то вроде этого,

$(document).ajaxComplete(function(event, xhr, settings) {
        // Add the headers again.
        $.ajaxSetup({
            headers : {
                "x-custom" : "value"
            }
        });
    }
});  

Вы можете найти документацию здесь.
Кроме того, с jQuery 1.8 метод .ajaxComplete() должен быть прикреплен только к документу.