jQuery.getJSON()
jQuery.getJSON( url, [ data ], [ success(data, textStatus, jqXHR) ] ) 返回: jqXHR
描述:通過(guò) HTTP GET 請(qǐng)求從服務(wù)器載入 JSON 數(shù)據(jù)。
-
version added: 1.0jQuery.getJSON( url, [ data ], [ success(data, textStatus, jqXHR) ] )
url一個(gè)包含發(fā)送請(qǐng)求的URL字符串
data向服務(wù)器發(fā)送請(qǐng)求的Key/value參數(shù)
success(data, textStatus, jqXHR)當(dāng)請(qǐng)求成功后執(zhí)行的回調(diào)函數(shù)。
這是一個(gè)快速的AJax處理函數(shù),相當(dāng)于:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
數(shù)據(jù)發(fā)送到服務(wù)器是作為一個(gè)附加到查詢字符串的URL。如果該值的data參數(shù)是一個(gè)對(duì)象,它會(huì)轉(zhuǎn)換為一個(gè)字符串和URL編碼,然后才追加到URL。
大多數(shù)實(shí)現(xiàn)將指定一個(gè)成功的處理程序:
$.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');
});
這個(gè)例子,當(dāng)然遵循JSON文件的結(jié)構(gòu):
{
"one": "Singular sensation",
"two": "Beady little eyes",
"three": "Little birds pitch by my doorstep"
}
使用這種結(jié)構(gòu),這個(gè)例子遍歷請(qǐng)求的數(shù)據(jù),建立了一個(gè)無(wú)序列表,并追加到“body”。
在success回調(diào)是通過(guò)返回的數(shù)據(jù),通常是一個(gè)JavaScript對(duì)象或數(shù)組所定義的JSON結(jié)構(gòu)和解析使用$.parseJSON()方法。它也通過(guò)了響應(yīng)文本狀態(tài)。
在jQuery 1.5,,在success回調(diào)函數(shù)接收一個(gè)“jqXHR”對(duì)象 ( 在jQuery 1.4中 ,它收到XMLHttpRequest對(duì)象)。然而,由于JSONP形式和跨域的GET請(qǐng)求不使用的XHR,在這些情況下, jqXHR和textStatus回調(diào)參數(shù)傳遞的成功是不確定的。
重要的: 在jQuery 1.4,如果JSON文件包含一個(gè)語(yǔ)法錯(cuò)誤,該請(qǐng)求通常會(huì)靜靜的失敗。避免頻繁手工編輯JSON數(shù)據(jù)就是這個(gè)原因。JSON是一種與語(yǔ)法規(guī)則比JavaScript的對(duì)象文字符號(hào)更加嚴(yán)格的數(shù)據(jù)交換格式。例如,所有在JSON字符串表示,無(wú)論是屬性或值,必須用雙引號(hào)括起來(lái)。例如,所有在JSON字符串表示,無(wú)論是屬性或值,必須用雙引號(hào)括起來(lái)。為了將JSON格式的細(xì)節(jié)上,看到http://json.org/ 。
JSONP
如果URL包含字符串“回調(diào)=?”(或類似的,由服務(wù)器端API定義),請(qǐng)求被視為JSONP形式代替。見的討論jsonp的數(shù)據(jù)類型$.ajax()的更多細(xì)節(jié)。
jqXHR 對(duì)象
所有jQuery的Ajax方法都返回超集XMLHTTPRequest對(duì)象。這個(gè)jQuery XHR對(duì)象,或“jqXHR”
在jQuery 1.5,所有jQuery的Ajax方法都返回的超集XMLHTTPRequest對(duì)象。這個(gè)jQuery XHR對(duì)象,或“jqXHR,”通過(guò)$.getJSON()約定的接口實(shí)現(xiàn)返回,給它的所有屬性,方法和約定的行為(見Deferred object獲取更多信息)。為了方便和一致性,回調(diào)名稱使用$.ajax(),它提供.error() .success()和.complete()方法。這些方法當(dāng)$.ajax()請(qǐng)求終止時(shí)需要一個(gè)函數(shù)參數(shù)調(diào)用,這個(gè)函數(shù)接收$.ajax()回調(diào)函數(shù)名相同的參數(shù)。
在jQuery 1.5的約定接口也使jQuery的Ajax方法,其中包括$.getJSON() ,以鏈多個(gè).success(), .complete()和.error()回調(diào)的一個(gè)請(qǐng)求,甚至回調(diào)后分配這些請(qǐng)求可能已經(jīng)完成。如果請(qǐng)求已經(jīng)完成,立即觸發(fā)回調(diào)。
// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON("example.json", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
// perform other work here ...
// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });
其他注意事項(xiàng):
- 由于瀏覽器的安全限制,大多數(shù)“Ajax”的要求,均采用同一起源的政策 ;該請(qǐng)求不能成功地檢索來(lái)自不同的域,子域或協(xié)議的數(shù)據(jù)。
- Script和JSONP形式請(qǐng)求不受同源策略的限制。
Examples:
Example: 從 Flickr JSONP API中加載最近的四張標(biāo)簽為貓的圖片:
<!DOCTYPE html>
<html>
<head>
<style>img{ height: 100px; float: left; }</style>
<script src="http://code.jquery.com/jquery-1.5.js"></script>
</head>
<body>
<div id="images">
</div>
<script>
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
{
tags: "cat",
tagmode: "any",
format: "json"
},
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:
Example: 通過(guò)test.js加載這個(gè)JSON數(shù)據(jù),并使用返回的JSON數(shù)據(jù)中的 name值:
$.getJSON("test.js", function(json) {
alert("JSON Data: " + json.users[3].name);
});
Example: 通過(guò)額外的Key/value參數(shù)從test.js加載這個(gè)JSON數(shù)據(jù),并使用返回的JSON數(shù)據(jù)中的 name值:
$.getJSON("test.js", { name: "John", time: "2pm" }, function(json) {
alert("JSON Data: " + json.users[3].name);
});