当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


JQuery jQuery.getJSON()用法及代码示例


用法
jQuery.getJSON( url [, data ] [, success ] ) => jqXHR

说明:使用 GET HTTP 请求从服务器加载 JSON-encoded 数据。

  • 添加的版本:1.0jQuery.getJSON( url [, data ] [, success ] )

    • url
      类型:String
      包含请求发送到的 URL 的字符串。
    • data
      类型:PlainObjectString
      与请求一起发送到服务器的普通对象或字符串。
    • success
      类型:Function(PlainObject数据,String文本状态,jqXHRjqXHR)
      请求成功时执行的回调函数。

这是一个简写的 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 回调传递返回的数据,该数据通常是由 JSON 结构定义并使用 $.parseJSON() 方法解析的 JavaScript 对象或数组。它还传递了响应的文本状态。

从 jQuery 1.5 开始, 这success回调函数接收一个"jqXHR" 对象(在jQuery 1.4,它收到了XMLHttpRequest目的)。但是,由于 JSONP 和 cross-domain GET 请求不使用XHR, 在这些情况下jqXHRtextStatus传递给成功回调的参数未定义。

重要的:从 jQuery 1.4 开始,如果 JSON 文件包含语法错误,请求通常会静默失败。出于这个原因,请避免频繁使用 hand-editing 的 JSON 数据。 JSON 是一种数据交换格式,其语法规则比 JavaScript 的对象文字表示法更严格。例如,JSON 中表示的所有字符串,无论是属性还是值,都必须包含在double-quotes 中。有关 JSON 格式的详细信息,请参阅https://json.org/.

JSONP

如果 URL 包含字符串 "callback=?"(或类似的,由服务器端 API 定义),则将请求视为 JSONP。有关详细信息,请参阅$.ajax() 中对jsonp 数据类型的讨论。

jqXHR 对象

从 jQuery 1.5 开始,所有 jQuery 的 Ajax 方法都返回一个超集XMLHTTPRequest目的。这个 jQuery XHR 对象,或 "jqXHR," 返回$.getJSON()实现 Promise 接口,为其提供 Promise 的所有属性、方法和行为(参见延迟对象了解更多信息)。这jqXHR.done()(为了成功),jqXHR.fail()(对于错误),和jqXHR.always()(用于完成,无论是成功还是错误;在 jQuery 1.6 中添加)方法采用一个函数参数,该参数在请求终止时调用。有关此函数接收的参数的信息,请参阅jqXHR 对象的部分$.ajax()文档。

jQuery 1.5 中的 Promise 接口还允许 jQuery 的 Ajax 方法,包括 $.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" 请求都受制于 same origin policy ;请求无法从不同的域、子域、端口或协议成功检索数据。
  • 脚本和 JSONP 请求不受同源策略限制。

例子:

从 Flickr JSONP API 加载雷尼尔山的四张最新照片。

<!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.5.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>

演示:

从 test.js 加载 JSON 数据并从返回的 JSON 数据中访问名称。

$.getJSON( "test.js", function( json ) {
  console.log( "JSON Data: " + json.users[ 3 ].name );
 });

从 test.js 加载 JSON 数据,传递其他数据,并从返回的 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 );
});

相关用法


注:本文由纯净天空筛选整理自jquery.com大神的英文原创作品 jQuery.getJSON()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。