jQuery ajax()
函數是可用於 XMLHttpRequest(又稱 AJAX)的最低抽象層級。所有其他 jQuery AJAX 函數(例如 load()
)都利用 ajax()
函數。使用 ajax()
函數為 XMLHttpRequests
提供了最強大的功能。 jQuery 也提供了其他更高層級的抽象化來執行非常特定類型的 XMLHttpRequests
。這些函數本質上是 ajax()
方法的捷徑。
#這些快捷方法是:
載入()
<code>get()
<code>getJSON()
<code>#getScript()
<code>post()
要注意的是,雖然快捷方式有時很好,但它們都在幕後使用 ajax()
。而且,當您需要 jQuery 在 AJAX 方面提供的所有功能和自訂功能時,您應該使用 ajax()
方法。
注意:預設情況下,ajax()
和 load()
AJAX 函數都使用 GET
HTTP 協定。
#帶有填充的 JSON (JSONP) 是一種技術,允許 HTTP 請求(傳回 JSON)的發送者為使用 JSON 物件作為函數參數進行呼叫的函數提供名稱。該技術不使用 XHR。它使用腳本元素,因此可以將資料從任何網站拉入任何網站。目的是為了規避XMLHttpRequest的同源策略限制。
使用 <code>getJSON() jQuery 函數,當 URL 中新增 JSONP 回呼函數時,您可以從另一個網域載入 JSON 資料。作為範例,以下是使用 Flickr API 的 URL 請求的樣子。
<span class="sgc-100">http://api.flickr.com/services/feeds/photos_public.gne?tags=resig&tagmode=all&format=json&jsoncallback</span>
=?
?
值用作捷徑,告訴 jQuery 呼叫作為 <code>getJSON() 函數的參數傳遞的函數。如果您不想使用此快捷方式,可以將 ?
替換為另一個函數的名稱。
下面,我使用 Flickr JSONP API 拉入一個網頁,其中包含帶有「resig」標籤的最新照片。請注意,我使用的是 ?
快捷方式,因此 jQuery 將簡單地呼叫我提供的 <code>getJSON() 函數的回呼函數。傳遞給回呼函數的參數是請求的JSON資料。
<!DOCTYPE html> <html lang="en"> <body> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script> (function($){ $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=resig&tagmode=all&format=json&jsoncallback=?", // Using ? just means call the callback function provided function (data) { // Data is the JSON object from Flickr $.each(data.items, function (i, item) { $('<img />').attr("src", item.media.m).appendTo('body'); if (i == 30) return false; }); }); })(jQuery); </script> </body> </html>
注意:請確保檢查您所使用的服務的 API 以便正確使用回呼。例如,Flickr 使用名稱 jsoncallback=?
,而 Yahoo!和 Digg 使用名稱 callback=?
。
執行 XHR 請求時,Internet Explorer 將快取回應。如果回應包含具有較長保質期的靜態內容,則快取可能是一件好事。但是,如果請求的內容是動態的並且可能隨時發生變化,您將需要確保瀏覽器不會快取該請求。一種可能的解決方案是將唯一的查詢字串值附加到 URL 的末尾。這將確保瀏覽器對於每個請求請求唯一的 URL。
// Add unique query string at end of the URL url: 'some?nocache='+(newDate()).getTime()
另一個解決方案(更多的是全域解決方案)是預設設定所有 AJAX 請求以包含我們剛才討論的無快取邏輯。為此,請使用 ajaxSetup
函數全域關閉快取。
$.ajaxSetup({ cache: false // True by default. False means caching is off. });
現在,為了用單獨的 XHR 請求覆蓋此全域設置,您只需在使用 ajax()
函數時更改快取選項即可。以下是使用 ajax()
函數執行 XHR 請求的程式碼範例,該函數將覆蓋全域設定並快取請求。
$.ajaxSetup ({ cache: false // True by default. False means caching is off. }); jQuery.ajax({ cache: true, url: 'some', type: 'POST' } );
以上是jQuery 簡化指南:探索 jQuery 和 Ajax的詳細內容。更多資訊請關注PHP中文網其他相關文章!