Spec-Zone.ru › jQuery

jQuery.getJSON()

jQuery.getJSON( url [, data ] [, success ] )Возвращает: jqXHR

Описание: Загрузка данных, закодированных в формате JSON, с сервера с использованием GET HTTP-запроса.

  • версия добавлена: 1.0jQuery.getJSON( url [, data ] [, success ] )

    • url
      Тип: Строка
      Строка, содержащая URL-адрес, к которому отправляется запрос.
    • data
      Тип: Объект или Строка
      Объект или строка, отправляемые на сервер вместе с запросом.
    • success
      Тип: Функция( Объект data, Строка textStatus, jqXHR jqXHR )
      Функция обратного вызова, которая выполняется, если запрос успешен.

Это функция 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 );
});

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/jQuery.getJSON

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API