Ajax в MVC с настройками по умолчанию

В нашем приложении много вызовов ajax.

Можем ли мы установить базовые параметры, такие как заголовки, асинхронность, тип данных, в файле макета и использовать / переопределять только те параметры, которые меняются при выполнении вызова.

например. В файле макета

  $.ajax({
        dataType: "json",
        async: false,
        headers: { "Accept-Encoding": "compress, gzip" }
  });

например: в вызывающем файле

$.ajax({
        url: "@Url.Action("GetState", "Country")",
        async: true,
        data: { search: search, StateId: state },
        success: function (data) {   
        }
  });

1 ответ

jQuery сам уже имеет ajaxSetup()метод для установки параметров по умолчанию, которые будут включены для будущих обратных вызовов AJAX. Вот пример использования настроек по умолчанию для всех страниц просмотра с одинаковой страницей макета:

$.ajaxSetup({
    dataType: "json",
    async: false,
    headers: { "Accept-Encoding": "compress, gzip" }
});

Затем вы можете добавить другие настройки на странице просмотра:

$.ajax({
    url: "@Url.Action("GetState", "Country")",
    data: { search: search, StateId: state },
    success: function (data) { 
        // do something  
    }
});

Если вы хотите переопределить настройки по умолчанию, вы можете определить параметры AJAX и передать их через $.ajax():

var config = {
    type: 'POST',
    url: "@Url.Action("GetState", "Country")",
    data: { search: search, StateId: state },
    async: true,
    dataType: "text"
};

$.ajax(config);

Тем не менее, использование ajaxSetup() не рекомендуется по этой причине:

Указанные здесь настройки влияют на все звонки $.ajax или производные на основе Ajax, такие как $.get(), Это может вызвать нежелательное поведение, так как другие вызывающие абоненты (например, плагины) могут ожидать нормальных настроек по умолчанию. По этой причине мы настоятельно рекомендуем не использовать этот API. Вместо этого установите параметры явно в вызове или определите простой плагин для этого.

Следовательно, лучше создавать настройки по умолчанию в одной переменной или функции и расширять их всякий раз, когда это необходимо, поскольку в основном настройки AJAX содержат объекты пары ключ-значение (KVP). использование jQuery.extend() функция для объединения настроек по умолчанию в другую, а затем передать ее как параметр обратного вызова AJAX:

// Layout page
var defaultSettings = {
    dataType: "json",
    async: false,
    headers: { "Accept-Encoding": "compress, gzip" }
};

// View page
var viewSettings = {
    url: "@Url.Action("GetState", "Country")",
    data: { search: search, StateId: state },
    success: function (data) { 
        // do something  
    }
};

var settings = $.extend({}, defaultSettings, viewSettings);
$.ajax(settings);

Дополнительно jQuery.isPlainObject() может использоваться перед отправкой AJAX-запроса, чтобы убедиться, что все параметры являются действительными KVP (он должен вернуть true за PlainObject тип).

Другие вопросы по тегам