這篇文章主要介紹了jQuery中$.ajax()提供的回調(diào)鉤子是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)是專業(yè)的甘南網(wǎng)站建設公司,甘南接單;提供成都網(wǎng)站設計、網(wǎng)站建設、外貿(mào)網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行甘南網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
Callback Function Queues(回調(diào)函數(shù))
beforeSend, error, dataFilter, success 和 complete接受的回調(diào)函數(shù)是在合適的時間調(diào)用。
從jQuery 1.5開始, fail , done ,和從jQuery 1.6開始的always回調(diào)鉤子(hooks)采用先入先出隊列管理。這意味著你可以為每個掛鉤分配多個回調(diào)。見Deferred object methods ,這是實現(xiàn)內(nèi)部的$.ajax()回調(diào)鉤子(hooks)。
這里有$.ajax()提供的回調(diào)鉤子 (hooks),如下:
beforeSend 在發(fā)送請求之前調(diào)用,它接收jqXHR對象和settings作為參數(shù)對象。
error 在請求出錯時調(diào)用。如果請求失敗,在它們的順序依次登記。他們接受jqXHR ,字符串表示的錯誤類型,以及異常對象(如果有的話)。一些內(nèi)置的錯誤會將 "abort", "timeout", "No Transport" 等字符串作為異常對象。
dataFilter 在請求成功之后調(diào)用。傳入返回的數(shù)據(jù)以及dataType參數(shù)的值。并且必須返回新的數(shù)據(jù)(可能是處理過的)傳遞給success回調(diào)函數(shù)。
success 當請求成功并接收到返回數(shù)據(jù)之后調(diào)用。傳入返回后的數(shù)據(jù),以及包含成功代碼的字符串和jqXHR對象。
complete 請求完成時,無論是在失敗或成功,它們按順序依次執(zhí)行回調(diào)。他們收到jqXHR對象,以及一個包含成功或錯誤代碼。
Data Types(數(shù)據(jù)類型)
$.ajax()函數(shù)依賴服務器提供的信息來處理返回的數(shù)據(jù)。如果服務器報告說返回的數(shù)據(jù)是XML,那么返回的結果就可以用普通的XML方法或者jQuery的選擇器來遍歷。如果見得到其他類型,比如HTML,則數(shù)據(jù)就以文本形式來對待。
通過dataType選項還可以指定其他不同數(shù)據(jù)處理方式。除了單純的xml,dataType還可以指定 html, json, jsonp, script, 或者 text。
其中,text 和 xml類型返回的數(shù)據(jù)不會經(jīng)過處理。無論是通過jqXHR對象的responseText或responseXML,這些數(shù)據(jù)僅僅是傳遞給處理程序的成功
注意:我們必須確保網(wǎng)頁服務器報告的MIME類型與我們選擇的 dataType. 所匹配。比如說,XML的話,服務器端就必須聲明 text/xml 或者 application/xml 來獲得一致的結果。
如果指定為 html類型,任何內(nèi)嵌的JavaScript都會在HTML作為一個字符串返回之前執(zhí)行。類似的,指定script類型的話,也會先執(zhí)行服務器端生成JavaScript,然后再把腳本作為一個文本數(shù)據(jù)返回。
如果指定為json類型,則會把獲取到的數(shù)據(jù)作為一個JavaScript對象來解析,并且把構建好的對象作為結果返回。為了實現(xiàn)這個目的,他首先嘗試使用jQuery.parseJSON()。如果瀏覽器不支持,則使用一個Function來constructor?;蔚腏SON數(shù)據(jù)將拋出一個解析錯誤(查看json.org了解更多信息)。JSON數(shù)據(jù)是一種能很方便通過JavaScript解析的結構化數(shù)據(jù)。如果獲取的數(shù)據(jù)文件存放在遠程服務器上(域名不同,也就是跨域獲取數(shù)據(jù)),則需要使用jsonp類型代替。
jsonp類型會給請求的URL后面創(chuàng)建一個查詢字符串參數(shù) callback=? 。服務器端應當在JSON數(shù)據(jù)前加上回調(diào)函數(shù)名,以便完成一個有效的JSONP請求。如果要指定回調(diào)函數(shù)的參數(shù)名來取代默認的callback,可以通過設置$.ajax()的jsonp參數(shù)。
注意:JSONP是JSON格式的擴展。他要求一些服務器端的代碼來檢測并處理查詢字符串參數(shù)。更多信息可以參閱詳細介紹了其使用的原帖.
當數(shù)據(jù)被從遠程服務器取回(這是唯一可能使用script 或者 jsonp數(shù)據(jù)類型),error回調(diào)和全局事件將永遠不會被觸發(fā)。
注:如果指定了script或者jsonp類型,那么當從服務器接收到數(shù)據(jù)時,實際上是用了<script>標簽而不是XMLHttpRequest對象。這種情況下,$.ajax()不再返回一個XMLHttpRequest對象,并且也不會傳遞事件處理函數(shù),比如beforeSend。
Sending Data to the Server(發(fā)送數(shù)據(jù)到服務器)
默認情況下,Ajax請求使用GET方法。如果要使用POST方法,可以設定type參數(shù)值。這個選項也會影響 data 選項中的內(nèi)容如何發(fā)送到服務器。POST數(shù)據(jù)將被發(fā)送到服務器使用UTF-8字符集,根據(jù)W3C XMLHttpRequest的標準。
data選項既可以包含一個查詢字符串,比如 key1=value1&key2=value2,也可以是一個映射,比如 {key1: 'value1', key2: 'value2'} 。如果使用了后者的形式,則數(shù)據(jù)再發(fā)送前會用jQuery.param() 將其轉換成查詢字符串。這個處理過程也可以通過設置processData選項為false來回避。如果我們希望發(fā)送一個XML對象給服務器時,這種處理可能并不合適。并且在這種情況下,我們也應當改變contentType 選項的值,用其他合適的MIME類型來取代默認的 application/x-www-form-urlencoded 。
Advanced Options(高級選項)
global選項用于阻止響應注冊的回調(diào)函數(shù),比如.ajaxSend(), .ajaxError(),以及類似的方法。這在有些時候很有用,比如發(fā)送的請求非常頻繁且簡短的時候,就可以在.ajaxSend()里禁用這個??缬蚰_本和JSONP請求,全局選項自動設置為false。更多關于這些方法的詳細信息,請參閱下面的內(nèi)容。
如果服務器需要HTTP認證,可以使用用戶名和密碼可以通過 username 和 password 選項來設置。
Ajax請求是限時的,所以錯誤警告被捕獲并處理后,可以用來提升用戶體驗。請求超時這個參數(shù)通常就保留其默認值,要不就通過$.ajaxSetup()來全局設定,很少為特定的請求重新設置timeout選項。
默認情況下,請求總會被發(fā)出去,但瀏覽器有可能從他的緩存中調(diào)取數(shù)據(jù)。要禁止使用緩存的結果,可以設置cache參數(shù)為false。如果希望判斷數(shù)據(jù)自從上次請求后沒有更改過就報告出錯的話,可以設置ifModified為true。
scriptCharset允許給<script>標簽的請求設定一個特定的字符集,用于script 或者 jsonp類似的數(shù)據(jù)。當腳本和頁面字符集不同時,這特別好用。
Ajax的第一個字母是“asynchronous”的開頭字母,這意味著所有的操作都是并行的,完成的順序沒有前后關系。$.ajax()的async參數(shù)總是設置成true,這標志著在請求開始后,其他代碼依然能夠執(zhí)行。強烈不建議把這個選項設置成false,這意味著所有的請求都不再是異步的了,這也會導致瀏覽器被鎖死。
$.ajax()函數(shù)返回他創(chuàng)建的XMLHttpRequest對象。通常jQuery只在內(nèi)部處理并創(chuàng)建這個對象,但用戶也可以通過xhr 選項來傳遞一個自己創(chuàng)建的xhr對象。返回的對象通常已經(jīng)被丟棄了,但依然提供一個底層接口來觀察和操控請求。比如說,調(diào)用對象上的.abort() 可以在請求完成前掛起請求。
目前, 在Firefox中有一個bug,雖然.getResponseHeader('Content-Type')返回一個非空的字符串,但是 .getAllResponseHeaders()還是返回空字符串, 在Firefox中使用jQuery不支持自動解碼JSON CORS 響應。
重寫jQuery.ajaxSettings.xhr 的一種解決方案,如下
(function () {
var _super = jQuery.ajaxSettings.xhr,
xhrCorsHeaders = [ "Cache-Control", "Content-Language", "Content-Type", "Expires", "Last-Modified", "Pragma" ];
jQuery.ajaxSettings.xhr = function () {
var xhr = _super(),
getAllResponseHeaders = xhr.getAllResponseHeaders;
xhr.getAllResponseHeaders = function () {
var allHeaders = "";
try {
allHeaders = getAllResponseHeaders.apply( xhr );
if ( allHeaders ) {
return allHeaders;
}
} catch ( e ) {
}
$.each( xhrCorsHeaders, function ( i, headerName ) {
if ( xhr.getResponseHeader( headerName ) ) {
allHeaders += headerName + ": " + xhr.getResponseHeader( headerName ) + "\n";
}
});
return allHeaders;
};
return xhr;
};
})();
感謝你能夠認真閱讀完這篇文章,希望小編分享的“jQuery中$.ajax()提供的回調(diào)鉤子是什么”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!
網(wǎng)站欄目:jQuery中$.ajax()提供的回調(diào)鉤子是什么
本文網(wǎng)址:http://www.rwnh.cn/article42/pgsghc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、電子商務、網(wǎng)站設計公司、微信小程序、網(wǎng)站導航、虛擬主機
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)