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

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