Книга: JavaScript. Подробное руководство, 6-е издание
19.6.2.2. jQuery.getJSON()
Разделы на этой странице:
19.6.2.2. jQuery.getJSON()
Функция jQuery.getJSON()
подобна функции jQuery.getScript():
она загружает текст и затем обрабатывает его особым образом перед вызовом указанной функции обратного вызова. Функция jQuery.getJSON()
не выполняет загруженный текст как сценарий, а выполняет синтаксический разбор этого текста как данных в формате JSON (используя функцию jQuery.parseJSON():
описывается в разделе 19.7). Функцию jQuery.getJSON()
имеет смысл использовать, только когда ей передается функция обратного вызова. Если содержимое URL было благополучно загружено и разобрано, как данные в формате JSON, то полученный в результате объект передается функции обратного вызова в первом аргументе. Как и при использовании функции jQuery.getScript()
, во втором и третьем аргументах передаются код состояния «success» и объект XMLHttpRequest
:
// Допустим, что data.json содержит текст: '{"х":11"у":2}'
jQuery.getJS0N("data.json", function(data) {
// Здесь data - это объект {x:1. у:2}
});
Передача данных утилитам поддержки Ajax в библиотеке jQuery
Большинство методов поддержки архитектуры Ajax в библиотеке jQuery принимают аргумент (или параметр), определяющий данные для отправки на сервер вместе с URL. Обычно эти данные принимают вид строки, закодированной в формате URL, пар имя/значение, отделяющихся друг от друга символами амперсанда. (Этот формат представления данных известен, как MIME-тип «application/x-www-form-urlencoded». Его можно рассматривать как аналог формата JSON - формата представления простых JavaScript-объектов в виде строк.) При выполнении HTTP-запросов методом GET эта строка с данными добавляется в конец URL-адреса запроса. При выполнении запросов методом POST она отправляется в теле запроса после отправки НТТР-заголовков.
Получить строку с данными в этом формате можно с помощью метода serialize()
объекта jQuery
, содержащего формы или элементы формы. Отправить, например, HTML-форму с помощью метода load() можно следующим образом:
$("#submit_button").click(function(event) {
S(this.form).load( // Заменить форму, загрузив...
this.form.action, // из указанного url
$(this. form). serialize()); // с данными, добавленными в него
event.preventDefault(): // Отменить отправку формы по умолч.
this.disabled = "disabled": // Предотвратить несколько
}); // попыток отправки
Если в аргументе (или параметре) передать функции поддержки архитектуры Ajax в библиотеке jQuery объект, а не строку, то библиотека jQuery по умолчанию (с исключениями, описываемыми ниже) автоматически преобразует объект в строку, вызвав функцию jQuery.param()
. Эта вспомогательная функция интерпретирует свойства объекта как пары имя/значение и, например, преобразует объект {х:1 ,у:'hello”} в строку "x=1&y=hello".
В версии jQuery 1.4 функция jQuery.param()
способна обрабатывать более сложные объекты. Если значение свойства объекта является массивом, для каждого элемента этого массива будет создана отдельная пара имя/значение, а к имени свойства будут добавлены квадратные скобки. Если значением свойства является объект, имена свойств этого вложенного объекта помещаются в квадратные скобки и добавляются к имени внешнего свойства. Например:
S.param({a:[1,2,3]}) // Вернет "a[]=1&a[]=2&a[]=3”
$.param({o:{x:1,y:true))) // Вернет "o[x]=1&o[y]=true"
$.param({o:{x:{y:[1.2]}>>) // Вернет "o[x][y][]=1&o[x][y][]=2"
Для обратной совместимости с версией jQuery 1.3 и ниже во втором аргументе функции jQuery.param()
можно передать значение true или установить параметр traditional
в значение true. Это предотвратит использование расширенных возможностей сериализации свойств, значениями которых являются массивы или объекты.
Иногда бывает необходимо передать в теле POST-запроса объект Document
(или какой-то другой объект, который не должен преобразовываться автоматически). В этом случае можно установить в параметре contentType
тип данных и в параметре processData
значение false и тем самым предотвратить передачу объекта с данными функции jQuery.param().
*************************************************
В отличие от jQuery.getScript(),
функция jQuery.getJSON()
принимает необязательный аргумент с данными, подобный тому, что передается методу load().
Если функции jQuery.getJSON()
необходимо передать данные, они должны передаваться во втором аргументе, а функция обратного вызова - в третьем. Если дополнительные данные не требуются, функцию обратного вызова можно передать во втором аргументе. Если данные являются строкой, она будет добавлена в конец URL-адреса, вслед за символом ? или &. Если данные передаются в виде объекта, он будет преобразован в строку (как описывается во врезке) и добавлен в конец URL-адреса.
Если строка URL или данных, передаваемая функции jQuery.getJSON(),
содержит последовательность символов «=?» в конце или перед амперсандом, она определяет запрос JSONP. (Описание формата JSONP приводится в разделе 18.2.) Библиотека jQuery заменит знак вопроса именем функции обратного вызова, которая будет создана автоматически, и функция jQuery.getJS0N()
будет действовать, как если бы выполнялся запрос сценария, а не объекта в формате JSON. Этот прием не работает со статическими JSON-файлами данных: он может применяться только при наличии сценариев на стороне сервера, поддерживающих формат JSONP. Однако, поскольку данные в формате JSONP обрабатываются как сценарии, для их получения допускается выполнять междоменные запросы.
- 19.6.2.3. jQuery.get() и jQuery.post()
- 19.6.3. Функция jQuery.ajax()
- jQuery. getJSON
- jQuery.getScript
- jQuery.get и jQuery.post
- 19.6.2.1. jQuery.getScript()
- 19.1.1. Функция jQuery()
- 19.8. Селекторы и методы выбора в библиотеке jQuery
- 19.9. Расширение библиотеки jQuery с помощью модулей расширений
- 19 Библиотека jQuery
- 19.1. Основы jQuery
- 19.2. Методы чтения и записи объекта jQuery