當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。