jQuery.getJSON( url [, data ] [, success ] )Возвращает: jqXHR
Описание: Загрузка данных, закодированных в формате JSON, с сервера с использованием GET HTTP-запроса.
-
версия добавлена: 1.0jQuery.getJSON( url [, data ] [, success ] )
- urlТип: СтрокаСтрока, содержащая URL-адрес, к которому отправляется запрос.
- dataОбъект или строка, отправляемые на сервер вместе с запросом.
- successФункция обратного вызова, которая выполняется, если запрос успешен.
-
Это функция Ajax, являющаяся сокращением, эквивалентной:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
}); Данные, отправляемые на сервер, добавляются к URL в качестве строки запроса. Если значение параметра data — это обычный объект, он преобразуется в строку и кодируется по URL перед добавлением к URL.
Большинство реализаций будут указывать обработчик успеха:
$.getJSON( "ajax/test.json", function( data ) {
var items = [];
$.each( data, function( key, val ) {
items.push( "<li id='" + key + "'>" + val + "</li>" );
});
$( "<ul/>", {
"class": "my-new-list",
html: items.join( "" )
}).appendTo( "body" );
}); Этот пример, конечно, зависит от структуры файла JSON:
{
"one": "Singular sensation",
"two": "Beady little eyes",
"three": "Little birds pitch by my doorstep"
} Используя эту структуру, пример проходит по запрошенным данным, создает неупорядоченный список и добавляет его в тело.
Функция обратного вызова success получает возвращенные данные, которые обычно представляют собой объект или массив JavaScript, определенные структурой JSON и обработанные с помощью метода $.parseJSON(). Также передается текстовый статус ответа.
Начиная с jQuery 1.5, функция обратного вызова success получает объект "jqXHR" (в jQuery 1.4 — объект XMLHttpRequest). Однако, так как JSONP и запросы GET для кросс-доменных запросов не используют XHR, в этих случаях параметры jqXHR и textStatus , переданные в функцию обратного вызова успеха, не определены.
Важно: Начиная с jQuery 1.4, если файл JSON содержит синтаксическую ошибку, запрос, как правило, завершается без сообщений об ошибках. По этой причине следует избегать частой ручной правки данных JSON. JSON — это формат обмена данными со строгими синтаксическими правилами, более жёсткими, чем у литеральных обозначений объектов JavaScript. Например, все строки, представленные в JSON, независимо от того, являются ли они свойствами или значениями, должны быть заключены в двойные кавычки. Подробную информацию о формате JSON см. на https://json.org/.
JSONP
Если URL содержит строку "callback=?" (или аналогичную, как определено API на стороне сервера), запрос обрабатывается как JSONP. Подробнее см. обсуждение типа данных jsonp в $.ajax().
Объект jqXHR
Начиная с jQuery 1.5, все методы Ajax jQuery возвращают супермножество объекта XMLHTTPRequest. Этот объект jQuery XHR, или "jqXHR", возвращаемый $.getJSON(), реализует интерфейс Promise, наделяя его всеми свойствами, методами и поведением Promise (см. Объект Deferred для получения дополнительной информации). Методы jqXHR.done() (для успеха), jqXHR.fail() (для ошибки) и jqXHR.always() (для завершения, как для успеха, так и для ошибки; добавлено в jQuery 1.6) принимают аргумент-функцию, которая вызывается при завершении запроса. Сведения об аргументах, которые получает эта функция, см. в разделе "Объект jqXHR" документации $.ajax().
Интерфейс Promise в jQuery 1.5 также позволяет методам Ajax jQuery, включая $.getJSON(), цеплять несколько .done(), .always(), и .fail() функции обратного вызова на один запрос и даже назначать эти функции обратного вызова после того, как запрос может быть завершен. Если запрос уже завершён, функция обратного вызова срабатывает немедленно.
// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON( "example.json", function() {
console.log( "success" );
})
.done(function() {
console.log( "second success" );
})
.fail(function() {
console.log( "error" );
})
.always(function() {
console.log( "complete" );
});
// Perform other work here ...
// Set another completion function for the request above
jqxhr.always(function() {
console.log( "second complete" );
}); Уведомление о устаревании
Методы обратного вызова jqXHR.success(), jqXHR.error(), и jqXHR.complete() удалены начиная с jQuery 3.0. Вместо них можно использовать jqXHR.done(), jqXHR.fail(), и jqXHR.always().
Дополнительные примечания:
- Из-за ограничений безопасности браузера большинство запросов "Ajax" подчиняются политике одного источника; запрос не может успешно извлечь данные из другого домена, поддомена, порта или протокола.
- Запросы скрипта и JSONP не подчиняются ограничениям политики одного источника.
Примеры:
Загружает четыре самых последних изображения горы Рейнир с API Flickr JSONP.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.getJSON demo</title>
<style>
img {
height: 100px;
float: left;
}
</style>
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
<div id="images"></div>
<script>
(function() {
var flickerAPI = "https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?";
$.getJSON( flickerAPI, {
tags: "mount rainier",
tagmode: "any",
format: "json"
})
.done(function( data ) {
$.each( data.items, function( i, item ) {
$( "<img>" ).attr( "src", item.media.m ).appendTo( "#images" );
if ( i === 3 ) {
return false;
}
});
});
})();
</script>
</body>
</html> Демо:
Загружает данные JSON из test.js и получает доступ к имени из возвращенных данных JSON.
$.getJSON( "test.js", function( json ) {
console.log( "JSON Data: " + json.users[ 3 ].name );
}); Загружает данные JSON из test.js, передавая дополнительные данные, и получает доступ к имени из возвращенных данных JSON. Если произошла ошибка, вместо этого запишите сообщение об ошибке.
$.getJSON( "test.js", { name: "John", time: "2pm" } )
.done(function( json ) {
console.log( "JSON Data: " + json.users[ 3 ].name );
})
.fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
});