中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jQuery中$.ajax()提供的回調鉤子是什么

發布時間:2022-03-05 11:21:06 來源:億速云 閱讀:291 作者:小新 欄目:web開發

這篇文章主要介紹了jQuery中$.ajax()提供的回調鉤子是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

  Callback Function Queues(回調函數)

  beforeSend, error, dataFilter, success 和 complete接受的回調函數是在合適的時間調用。

  從jQuery 1.5開始, fail , done ,和從jQuery 1.6開始的always回調鉤子(hooks)采用先入先出隊列管理。這意味著你可以為每個掛鉤分配多個回調。見Deferred object methods ,這是實現內部的$.ajax()回調鉤子(hooks)。

  這里有$.ajax()提供的回調鉤子 (hooks),如下:

  beforeSend 在發送請求之前調用,它接收jqXHR對象和settings作為參數對象。

  error 在請求出錯時調用。如果請求失敗,在它們的順序依次登記。他們接受jqXHR ,字符串表示的錯誤類型,以及異常對象(如果有的話)。一些內置的錯誤會將 "abort", "timeout", "No Transport" 等字符串作為異常對象。

  dataFilter 在請求成功之后調用。傳入返回的數據以及dataType參數的值。并且必須返回新的數據(可能是處理過的)傳遞給success回調函數。

  success 當請求成功并接收到返回數據之后調用。傳入返回后的數據,以及包含成功代碼的字符串和jqXHR對象。

  complete 請求完成時,無論是在失敗或成功,它們按順序依次執行回調。他們收到jqXHR對象,以及一個包含成功或錯誤代碼。

  Data Types(數據類型)

  $.ajax()函數依賴服務器提供的信息來處理返回的數據。如果服務器報告說返回的數據是XML,那么返回的結果就可以用普通的XML方法或者jQuery的選擇器來遍歷。如果見得到其他類型,比如HTML,則數據就以文本形式來對待。

  通過dataType選項還可以指定其他不同數據處理方式。除了單純的xml,dataType還可以指定 html, json, jsonp, script, 或者 text。

  其中,text 和 xml類型返回的數據不會經過處理。無論是通過jqXHR對象的responseText或responseXML,這些數據僅僅是傳遞給處理程序的成功

  注意:我們必須確保網頁服務器報告的MIME類型與我們選擇的 dataType. 所匹配。比如說,XML的話,服務器端就必須聲明 text/xml 或者 application/xml 來獲得一致的結果。

  如果指定為 html類型,任何內嵌的JavaScript都會在HTML作為一個字符串返回之前執行。類似的,指定script類型的話,也會先執行服務器端生成JavaScript,然后再把腳本作為一個文本數據返回。

  如果指定為json類型,則會把獲取到的數據作為一個JavaScript對象來解析,并且把構建好的對象作為結果返回。為了實現這個目的,他首先嘗試使用jQuery.parseJSON()。如果瀏覽器不支持,則使用一個Function來constructor。畸形的JSON數據將拋出一個解析錯誤(查看json.org了解更多信息)。JSON數據是一種能很方便通過JavaScript解析的結構化數據。如果獲取的數據文件存放在遠程服務器上(域名不同,也就是跨域獲取數據),則需要使用jsonp類型代替。

  jsonp類型會給請求的URL后面創建一個查詢字符串參數 callback=? 。服務器端應當在JSON數據前加上回調函數名,以便完成一個有效的JSONP請求。如果要指定回調函數的參數名來取代默認的callback,可以通過設置$.ajax()的jsonp參數。

  注意:JSONP是JSON格式的擴展。他要求一些服務器端的代碼來檢測并處理查詢字符串參數。更多信息可以參閱詳細介紹了其使用的原帖.

  當數據被從遠程服務器取回(這是唯一可能使用script 或者 jsonp數據類型),error回調和全局事件將永遠不會被觸發。

  注:如果指定了script或者jsonp類型,那么當從服務器接收到數據時,實際上是用了<script>標簽而不是XMLHttpRequest對象。這種情況下,$.ajax()不再返回一個XMLHttpRequest對象,并且也不會傳遞事件處理函數,比如beforeSend。

  Sending Data to the Server(發送數據到服務器)

  默認情況下,Ajax請求使用GET方法。如果要使用POST方法,可以設定type參數值。這個選項也會影響 data 選項中的內容如何發送到服務器。POST數據將被發送到服務器使用UTF-8字符集,根據W3C XMLHttpRequest的標準。

  data選項既可以包含一個查詢字符串,比如 key1=value1&key2=value2,也可以是一個映射,比如 {key1: 'value1', key2: 'value2'} 。如果使用了后者的形式,則數據再發送前會用jQuery.param() 將其轉換成查詢字符串。這個處理過程也可以通過設置processData選項為false來回避。如果我們希望發送一個XML對象給服務器時,這種處理可能并不合適。并且在這種情況下,我們也應當改變contentType 選項的值,用其他合適的MIME類型來取代默認的  application/x-www-form-urlencoded 。

  Advanced Options(高級選項)

  global選項用于阻止響應注冊的回調函數,比如.ajaxSend(), .ajaxError(),以及類似的方法。這在有些時候很有用,比如發送的請求非常頻繁且簡短的時候,就可以在.ajaxSend()里禁用這個。跨域腳本和JSONP請求,全局選項自動設置為false。更多關于這些方法的詳細信息,請參閱下面的內容。

  如果服務器需要HTTP認證,可以使用用戶名和密碼可以通過 username 和 password 選項來設置。

  Ajax請求是限時的,所以錯誤警告被捕獲并處理后,可以用來提升用戶體驗。請求超時這個參數通常就保留其默認值,要不就通過$.ajaxSetup()來全局設定,很少為特定的請求重新設置timeout選項。

  默認情況下,請求總會被發出去,但瀏覽器有可能從他的緩存中調取數據。要禁止使用緩存的結果,可以設置cache參數為false。如果希望判斷數據自從上次請求后沒有更改過就報告出錯的話,可以設置ifModified為true。

  scriptCharset允許給<script>標簽的請求設定一個特定的字符集,用于script 或者 jsonp類似的數據。當腳本和頁面字符集不同時,這特別好用。

  Ajax的第一個字母是“asynchronous”的開頭字母,這意味著所有的操作都是并行的,完成的順序沒有前后關系。$.ajax()的async參數總是設置成true,這標志著在請求開始后,其他代碼依然能夠執行。強烈不建議把這個選項設置成false,這意味著所有的請求都不再是異步的了,這也會導致瀏覽器被鎖死。

  $.ajax()函數返回他創建的XMLHttpRequest對象。通常jQuery只在內部處理并創建這個對象,但用戶也可以通過xhr 選項來傳遞一個自己創建的xhr對象。返回的對象通常已經被丟棄了,但依然提供一個底層接口來觀察和操控請求。比如說,調用對象上的.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()提供的回調鉤子是什么”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙江县| 米泉市| 克什克腾旗| 方山县| 靖州| 遵化市| 凤凰县| 丘北县| 呼图壁县| 灵台县| 尼玛县| 凌云县| 陈巴尔虎旗| 万荣县| 宝鸡市| 柘荣县| 和平区| 加查县| 厦门市| 滕州市| 岐山县| 巨鹿县| 博兴县| 高台县| 克拉玛依市| 乐平市| 大余县| 海丰县| 娄底市| 楚雄市| 陇西县| 洱源县| 阿勒泰市| 合阳县| 宜良县| 东莞市| 深圳市| 项城市| 江华| 万宁市| 咸宁市|