jQuery.getJSON() — получение JSON данных с сервера
Функция jQuery.getJSON() предоставляет простой способ получения данных в формате JSON с сервера при помощи AJAX запроса.
Обзор метода jQuery.getJSON()
Метод getJSON() является сокращенной версией функции $.ajax() и позволяет выполнить GET запрос к серверу для получения данных в формате JSON.
Основные преимущества использования getJSON():
- Простота использования по сравнению с нативным AJAX
- Автоматическая обработка и парсинг JSON данных
- Поддержка цепочек методов и обработчиков событий
Метод getJSON() поддерживается начиная с jQuery версии 1.0. Полученные данные автоматически преобразуются в JavaScript объекты и доступны в обработчиках событий.
Синтаксис выглядит так:
$.getJSON(url, [data], [callback]);
Возвращаемым значением является объект jqXHR
, реализующий интерфейс Promise.
Получение и обработка данных JSON
Данные в формате JSON имеют строгую структуру в виде пар "ключ-значение", что позволяет легко преобразовывать их в JavaScript объекты и массивы.
Полученный объект данных можно обработать следующими способами:
- Вывести на страницу при помощи манипуляций с DOM
- Отфильтровать или преобразовать данные по необходимости
- Передать в другие функции для дальнейшей обработки
- Сохранить данные в переменные для последующего использования
Рассмотрим пример получения и вывода погодных данных с сервиса OpenWeatherMap:
$.getJSON("https://api.openweathermap.org/data/2.5/weather?q=Moscow&appid=APIKEY&units=metric", function(data) { let temp = data.main.temp; let description = data.weather[0].description; $("#weather").html("Температура в Москве: " + temp + ", " + description); });
В примере мы получаем JSON данные о погоде, извлекаем нужные параметры (температура и описание), после чего выводим их на страницу.
При возникновении ошибок следует обрабатывать их в обработчиках .fail() или .catch().
Дополнительные возможности
Метод getJSON() поддерживает callback-функции, цепочки вызовов, обработку ошибок и другие возможности.
Рассмотрим пример загрузки данных о валютах с async функцией обратного вызова:
function getRates(callback) { Copy code$.getJSON("http://api.exchangeratesapi.io/v1/latest?access_key=APIkey", callback); } getRates(function(data) { Copy codelet rub = data.rates.RUB; let usd = data.rates.USD; // доступ к данным через callback });\
Такой подход позволяет отделить логику получения данных от их обработки.
Также через объект jqXHR реализуются цепочки вызовов с отложенным выполнением:
$.getJSON(url) .done(function() { ... }) .fail(function() { ... }) .always(function() { ... });
Это упрощает написание asynchronous кода.
Советы по оптимизации
Использование кэширование позволяет сократить количество запросов к серверу:
$.ajaxSetup({ cache: true });
Также полезно выполнять запросы к серверу после загрузки страницы:
$(document).ready(function() { $.getJSON(url); });
Альтернативы метода getJSON()
Для получения JSON данных можно использовать и другие методы jQuery:
- $.get() и $.post() + ручной парсинг
- $.ajax() для расширенной настройки
- Методы ванильного JavaScript fetch и XMLHttpRequest
Но getJSON() в большинстве случаев оптимально подходит для задач, связанных с получением и обработкой данных JSON.
Работа с большими объемами данных
При загрузке больших объемов данных JSON рекомендуется использовать постраничную выборку с LIMIT и OFFSET.
Например, для вывода новостей можно сделать так:
let limit = 10; let page = 1; let url = "/data.json?limit=" + limit + "&offset=" + (page-1)*limit; $.getJSON(url, function(data) { // вывод новостей для текущей страницы });
Это позволит не загружать сразу весь массив данных, а динамически подгружать его части.
Предзагрузка данных
Чтобы ускорить работу приложения, можно предзагружать данные до того, как они потребуются.
Например, информацию о пользователе:
let userData; $.getJSON("/users/123.json", function(data) { userData = data; }); // данные записываются в переменную заранее\
А при необходимости уже будут доступны без задержки.
Отложенная загрузка данных
Данные JSON также можно подгружать по требованию или с задержкой.
Это позволяет уменьшить начальную загрузку страницы.
let getJsonData = function() { return $.getJSON(url); } // вызов по требованию getJsonData().then(data => { // работа с data });
Кэширование данных на клиенте
Для повторно запрашиваемых данных имеет смысл организовать кеширование на стороне клиента. Это позволит сократить нагрузку на сервер и ускорит работу приложения. Данные можно хранить в LocalStorage, сессионных переменных или просто JS-переменных.