jQuery 發(fā)送的所有 Ajax 請(qǐng)求,內(nèi)部都會(huì)通過(guò)調(diào)用 $.ajax()
函數(shù)來(lái)實(shí)現(xiàn)。通常沒(méi)有必要直接調(diào)用這個(gè)函數(shù),可以使用幾個(gè)已經(jīng)封裝的簡(jiǎn)便方法,如$.get()和.post()。如果你需要用到那些不常見(jiàn)的選項(xiàng),那么, $.ajax()使用起來(lái)更靈活。
注意: 可以通過(guò)$.ajaxSetup()函數(shù)來(lái)全局設(shè)置默認(rèn)選項(xiàng)
jqXHR 對(duì)象
從jQuery 1.5開(kāi)始,$.ajax() 返回jqXHR對(duì)象,該對(duì)象是瀏覽器原生的XMLHttpRequest對(duì)象的一個(gè)超集。例如,它包含responseText和responseXML屬性,以及一個(gè)getResponseHeader()方法。當(dāng)傳輸機(jī)制不是XMLHttpRequest時(shí)(例如,一個(gè)JSONP請(qǐng)求腳本,返回一個(gè)腳本標(biāo)簽時(shí)),jqXHR對(duì)象盡可能的模擬原生的XHR功能。
jqXHR對(duì)象 實(shí)現(xiàn)了 Promise 接口, 使它擁有了 Promise 的所有屬性,方法和行為。
- jqXHR.done(function(data, textStatus, jqXHR) {});
- jqXHR.fail(function(jqXHR, textStatus, errorThrown) {});
- jqXHR.always(function(data|jqXHR, textStatus, jqXHR|errorThrown) { });
- jqXHR.then(function(data, textStatus, jqXHR) {}, function(jqXHR, textStatus, errorThrown) {});
this在所有的回調(diào)中的引用,由這個(gè)對(duì)象在傳遞給$.ajax的context參數(shù)設(shè)置;如果沒(méi)有指定context參數(shù),this 引用的是Ajax settings本身。
為了向后兼容XMLHttpRequest ,一jqXHR對(duì)象將公開(kāi)下列屬性和方法:
- readyState
- status
- statusText
- responseXML and/or responseText 當(dāng)?shù)讓拥恼?qǐng)求分別作出XML和/或文本響應(yīng)
- setRequestHeader(name, value) 從標(biāo)準(zhǔn)出發(fā),通過(guò)替換舊的值為新的值,而不是替換的新值到舊值
- getAllResponseHeaders()
- getResponseHeader()
- abort()
假如沒(méi)有onreadystatechange屬性,因?yàn)椴煌臓顟B(tài)可以分別在 success , error , complete和statusCode 方法中進(jìn)行處理。
Data Types
可用的data types 包括 text, html, xml, json, jsonp, and script。
- text 和 html類型返回的數(shù)據(jù)不會(huì)經(jīng)過(guò)處理。這些數(shù)據(jù)僅僅是簡(jiǎn)單的傳遞給成功回調(diào)函數(shù),并通過(guò)jqXHR對(duì)象的responseText獲得。
- xml類型在傳遞給成功回調(diào)函數(shù)前通過(guò)jQuery.parseXML解析成XMLDocument,并通過(guò)
jqXHR對(duì)象的responseXML獲得。 - json類型在傳遞給成功回調(diào)函數(shù)前通過(guò)jQuery.parseJSON 解析成JSON對(duì)象,并通過(guò)
jqXHR對(duì)象的responseJSON 獲得。 - script 類型在傳遞給成功回調(diào)函數(shù)前將執(zhí)行從服務(wù)器接收到的JavaScript并作為一個(gè)字符串傳遞給成功回調(diào)函數(shù)
- jsonp類型會(huì)自動(dòng)給請(qǐng)求的URL后面創(chuàng)建一個(gè)查詢字符串參數(shù) callback=? 。服務(wù)器端應(yīng)當(dāng)在JSON數(shù)據(jù)前加上回調(diào)函數(shù)名,以便完成一個(gè)有效的JSONP請(qǐng)求。$.ajax()將會(huì)執(zhí)行返回的JavaScript,調(diào)用JSONP回調(diào)函數(shù),在JSON 對(duì)象傳遞給成功回調(diào)函數(shù)前。
注意:Script和JSONP形式請(qǐng)求不受同源策略的限制。