JQuery.getJSON

作者: 人半童 | 来源:发表于2017-03-13 15:35 被阅读209次
描述:
      使用 "GET" HTTP请求从服务器导入JSON格式数据。
JQuery.getJSON(url [,data] [,success])
url
类型:字符串
一个包含发送请求的链接

data
类型:一般对象([PlainObject](http://api.jquery.com/Types/#PlainObject))或字符串
根据请求被发送至服务器的一般对象或字符串

success
类型:函数对象
请求成功执行的函数

它是一个缩略的Ajax函数,等价于:

 $.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

发送给服务器的Data会被附加至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"
}

根据这种结构,上面这个例子遍历得到的数据,然后建立一个无序列表,添加至body元素内。

success回调传入的返回的数据,该数据根据JSON结构来定义,是典型地一个JS对象或数组,然后使用parseJSON()方法来转换。该函数也能响应文本格式。

JQuery 1.5 中,成功函数接收一个"jqXHR" 对象(在JQuery 1.4中,它接收XMLHTTPObject对象)。然后,因为JSONP和跨域的GET请求不使用XHR,所以在这样的案例中传入成功函数的jqXHR和textStatus属于未定义。

重要:

JQuery 1.5 中,如果JSON文件包含一个语法错误,请求通常会默默失败,避免因为这个原因而频繁地手动修改JSON数据。JSON这种数据交换格式,拥有比其它JS对象的文字记法严格的多的语法规则。例如,JSON中的所有字符串,无论是属性还是值,都必须用双引号引起。查询更多JSON格式的语法细节,请参考:http://json.org/.

JSONP

如果传入的URL包括字符串“callback=?”(或类似的,由服务器API定义的),该请求会被替代为JSONP请求。参考$.ajax()中有关JSONP的讨论获得更多细节。

jqXHR对象

在JQuery 1.5 中,所有的JQuery Ajax 方法都会返回一个XMLHTTPObject对象的超集。这个JQuery XHR对象,即jqXHR,由$.getJSOnPromise接口返回,返回一个Promise全部的属性,方法和行为(参阅: Deferred object)。jqXHR.done()(用于成功),jqXHR.fail()(用于错误)和jqXHR.always()(用于完成,无论成功与否,于JQuery 1.6添加)都会在请求结束时传入一个函数作为参数执行。关于这个函数接收的参数的更多信息,请参阅$.ajax文档的jqXHR Object 一节。

JQuery 1.5Promise接口允许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.complete(function() {
  console.log( "second complete" );
});
清除说明:

jqXHR.success()jqXHR.error()jqXHR.complete已经在JQuery 3.0中被移除,取而代之的是jqXHR.done()jqXHR.fail()jqXHR.always()

附加说明:
  • 因为浏览器的安全限制,大多“Ajax”请求都是同源策略的对象:请求不会成功取回来自不同域,子域,端口或协议的数据。
  • ScriptJSONP请求不是同源策略的对象。

例子:

使用 Flicker JSONP API 导入四张最近关于Mount Rainer 的图片

<!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-1.10.2.js"></script>
</head>
<body>
 
<div id="images"></div>
 
<script>
(function() {
  var flickerAPI = "http://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>
Demo

text.js中导入JSON数据,然后从返回的JSON数据中获得name

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

text.js中导入JSON数据,传递额外的数据,然后从返回的JSON数据中获得name,如果出现错误,写下错误信息:

$.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文档的第一篇稿,疏漏或错误的地方,希望指正,欢迎来评论区讨论。初来乍到,多多关照。 :)

原文请戳我

相关文章

  • JQuery.getJSON

    描述: 它是一个缩略的Ajax函数,等价于: 发送给服务器的Data会被附加至URL作为查询字符串。如果data的...

网友评论

    本文标题:JQuery.getJSON

    本文链接:https://www.haomeiwen.com/subject/iezogttx.html