Правильный способ добавления заголовка запроса с помощью jQuery

#javascript #jquery

#javascript #jquery

Вопрос:

Иногда в IE мои запросы ajax не отправляют заголовок X-Requested-With. Я искал в Google и нашел 2 способа сделать это. Оба способа, похоже, имеют смысл. Я хочу знать, есть ли какая-либо разница между ними.

1) Использование ajaxSend

 $(document).ajaxSend(function (event, request, settings) {
    request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
});
  

2) Использование ajaxSetup

 $.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    }
});
  

Комментарии:

1. По какой-то причине использование ajaxSetup() не рекомендуется, так что остается ajaxSend() . api.jquery.com/jquery.ajaxsetup

Ответ №1:

Если вы используете полноценный jQuery.ajax(), вы можете использовать свойство headers:

 $.ajax({
  headers: { "ResponseDataType" : "Json",
    "X-Requested-With", "XMLHttpRequest"},
  // etc
});
  

Добавлена СУХАЯ версия:

 (function (window, undefined)
{
  function extendedAjax(settings)
  {
    var defaultSettings = {
      headers: { "X-Requested-With": "XMLHttpRequest" }
    };

    $.extend(defaultSettings, settings);

    var jqXHR = $.ajax(settings);

    return jqXHR;
  }

  $.extend({
    eajax: extendedAjax
  });

})(window);
  

Комментарии:

1. Да, я знаю, но я хочу сделать это для всех запросов.

2. Я просто расширяю jQuery, чтобы использовать все необходимые мне требования, поэтому мой код остается СУХИМ .

3. Почему бы не использовать ajaxSetup и не установить заголовки?

4. $.ajaxSetup({ headers: {«X-Requested-With»: «XMLHttpRequest»} });

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