19.6.2. Вспомогательные функции поддержки Ajax
Другие высокоуровневые утилиты поддержки архитектуры Ajax в библиотеке jQuery являются функциями, а не методами и вызываются относительно глобального имени
<b>jQuery</b>
или
<b>$</b>
, а не относительно объекта с выбранными элементами. Функция
<b>jQuery.getScript()</b>
загружает и выполняет файлы со сценариями на языке JavaScript. Функция
<b>jQuery.getJS0N()</b>
загружает содержимое URL и разбирает его как текст в формате JSON, а получившийся в результате объект передает указанной функции обратного вызова. Обе эти функции вызывают функцию
<b>jQuery.get()</b>
, которая является более универсальной функцией загрузки данных из указанного URL-адреса. Наконец, функция
<b>jQuery.post()</b>
действует подобно функции
<b>jQuery.get(),</b>
но выполняет HTTP-запрос методом POST, а не GET. Как и метод
<b>load(),</b>
все эти функции выполняются асинхронно: они возвращают управление еще до того, как будут загружены какие-либо данные, и извещают программу о результатах посредством указанной функции обратного вызова.
19.6.2.1. jQuery.getScript()
Функция
<b>jQuery.getScript()</b>
принимает в первом аргументе URL-адрес файла со сценарием на языке JavaScript. Она асинхронно загружает и выполняет этот сценарий в глобальной области видимости. Выполняться могут сценарии как общего происхождения с документом, так и сторонние:
<b>// Динамически загрузить сценарий с некоторого другого сервера </b>
<b>jQuery.getScript("</b><a href="http://example.com/js/widget.js"><b>http://example.com/js/widget.js</b></a><b>");</b>
Во втором аргументе можно передать функцию обратного вызова, и в этом случае библиотека jQuery вызовет ее сразу после того, как загруженный сценарий будет выполнен.
<b>// Загрузить библиотеку и воспользоваться ею после загрузки</b>
<b>jQuery.getScript("js/jquery.my_plugin.js", function() {</b>
<b> $('div').my_plugin(); // Воспользоваться загруженной библиотекой</b>
<b>});</b>
Для получения текста сценария, который должен быть выполнен, функция
<b>jQuery.getScript()</b>
обычно использует объект
<b>XMLHttpRequest</b>
. Но для выполнения междоменных запросов (когда сценарий поставляется сервером, отличным от того, откуда был получен текущий документ), библиотека jQuery использует элемент
<b><script></b>
(раздел 18.2). Если запрос удовлетворяет ограничениям политики общего происхождения, в первом аргументе функции обратного вызова передается текст сценария, во втором - код состояния «success» и в третьем - объект
<b>XMLHttpRequest</b>
, использовавшийся для получения текста сценария. Возвращаемым значением функции
<b>jQuery.getScript()</b>
в данном случае также является объект
<b>XMLHttpRequest</b>
. Для междоменных запросов, которые выполняются без участия объекта
<b>XMLHttpRequest</b>
, текст сценария не сохраняется. В этом случае в первом и третьем аргументах функции обратного вызова передается значение undefined, и возвращаемым значением функции
<b>jQuery.getScript()</b>
также является значение undefined.
Функция обратного вызова, передаваемая функции
<b>jQuery.getScript(),</b>
вызывается только в случае успешного выполнения запроса. Если также необходимо получить извещение в случае ошибки, следует использовать низкоуровневую функцию
<b>jQuery.ajax()</b>
. То же относится и к трем другим вспомогательным функциям, описываемым в этом разделе.
19.6.2.2. jQuery.getJSON()
Функция
<b>jQuery.getJSON()</b>
подобна функции
<b>jQuery.getScript():</b>
она загружает текст и затем обрабатывает его особым образом перед вызовом указанной функции обратного вызова. Функция
<b>jQuery.getJSON()</b>
не выполняет загруженный текст как сценарий, а выполняет синтаксический разбор этого текста как данных в формате JSON (используя функцию
<b>jQuery.parseJSON():</b>
описывается в разделе 19.7). Функцию
<b>jQuery.getJSON()</b>
имеет смысл использовать, только когда ей передается функция обратного вызова. Если содержимое URL было благополучно загружено и разобрано, как данные в формате JSON, то полученный в результате объект передается функции обратного вызова в первом аргументе. Как и при использовании функции
<b>jQuery.getScript()</b>
, во втором и третьем аргументах передаются код состояния «success» и объект
<b>XMLHttpRequest</b>
:
<b>// Допустим, что data.json содержит текст: '{"х":1<sub>1</sub>"у":2}'</b>
<b>jQuery.getJS0N("data.json", function(data) {</b>
<b> // Здесь data - это объект {x:1. у:2}</b>
<b>});</b>
Передача данных утилитам поддержки Ajax в библиотеке jQuery
Большинство методов поддержки архитектуры Ajax в библиотеке jQuery принимают аргумент (или параметр), определяющий данные для отправки на сервер вместе с URL. Обычно эти данные принимают вид строки, закодированной в формате URL, пар имя/значение, отделяющихся друг от друга символами амперсанда. (Этот формат представления данных известен, как MIME-тип «application/x-www-form-urlencoded». Его можно рассматривать как аналог формата JSON - формата представления простых JavaScript-объектов в виде строк.) При выполнении HTTP-запросов методом GET эта строка с данными добавляется в конец URL-адреса запроса. При выполнении запросов методом POST она отправляется в теле запроса после отправки НТТР-заголовков.
Получить строку с данными в этом формате можно с помощью метода
<b>serialize()</b>
объекта
<b>jQuery</b>
, содержащего формы или элементы формы. Отправить, например, HTML-форму с помощью метода load() можно следующим образом: