Главная страница   /   15.9. Установка и фильтрация Ajax запросов (Pro jQuery

Pro jQuery

Pro jQuery

Адам Фриман

15.9. Установка и фильтрация Ajax запросов

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

Определение настроек по умолчанию

Метод ajaxSetup позволяет указать настройки, которые будут использованы для каждого Ajax запроса, освобождая вас от необходимости определять все настройки для всех и каждого запросов. В листинге 15-21 показано использование этого метода.

Листинг 15-21: Использование метода ajaxSetup
<script type="text/javascript">
	$(document).ready(function () {
		$.ajaxSetup({
			timeout: 15000,
			global: false,
			error: function (jqxhr, status, errorMsg) {
				$('<div class=error/>')
					.text("Status: " + status + " Error: " + errorMsg)
					.insertAfter('h1');
			},
			converters: {
				"text html": function (data) {
					return $(data);
				}
			}
		});
		$.ajax({
			url: "flowers.html",
			success: function (data, status, jqxhr) {
				var elems = data.filter('div').addClass("dcell");
				elems.slice(0, 3).appendTo('#row1');
				elems.slice(3).appendTo("#row2");
			},
		});
	});
</script>

Вы вызываете метод ajaxSetup против jQuery $ функции, так же как мы делаем и с методом ajax. Аргументом для ajaxSetup является объект, который содержит настройки, которые вы хотите использовать в качестве настроек по умолчанию для всех ваших Ajax запросов. В этом примере я использую значения по умолчанию для настроек timeout, global, error и converters. Как только я вызову метод ajaxSetup, мне нужно будет только определить значения для тех настроек, для которых я не предоставил значения по умолчанию или чьи значения я хочу поменять. Это может действительно сэкономить время, если вы делаете много Ajax запросов с похожей конфигурацией.

Совет

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

Фильтрация запросов

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

Листинг 15-22: Использование метода ajaxPrefilter
<script type="text/javascript">
	$(document).ready(function () {
		$.ajaxSetup({
			timeout: 15000,
			global: false,
			error: function (jqxhr, status, errorMsg) {
				$('<div class=error/>')
					.text("Status: " + status + " Error: " + errorMsg)
					.insertAfter('h1');
			},
			converters: {
				"text html": function (data) {
					return $(data);
				}
			}
		})

		$.ajaxPrefilter("json html", function (settings, originalSettings, jqxhr) {
			if (originalSettings.dataType == "html") {
				settings.timeout = 2000;
			} else {
				jqxhr.abort();
			}
		})

		$.ajax({
			url: "flowers.html",
			dataType: "html",
			success: function (data, status, jqxhr) {
				var elems = data.filter('div').addClass("dcell");
				elems.slice(0, 3).appendTo('#row1');
				elems.slice(3).appendTo("#row2");
			},
		});
	});
</script>

Функция, которую вы указали, будет выполняться для каждого нового Ajax запроса. Аргументами, переданными функции, являются настройки запроса (они включают в себя некоторые настройки по умолчанию, которые вы установили, используя ajaxSetup), оригинальные настройки, переданные методу ajax (который исключает любые настройки по умолчанию) и jqXHR объект для запроса. Вы делаете изменения для объекта, переданного в качестве первого аргумента, как показано в примере. В этом скрипте, если настройка dataType была указана в настройках, переданных методу ajax, тайм-аут устанавливается на 2 секунды. Для всех других запросов я вызываю метод abort для jqXHR объекта, чтобы прервать отправку запроса.