ajax() 方法通過(guò) HTTP 請(qǐng)求加載遠(yuǎn)程數(shù)據(jù)。
該方法是 jQuery 底層 AJAX 實(shí)現(xiàn)。簡(jiǎn)單易用的高層實(shí)現(xiàn)見(jiàn) $.get, $.post 等。$.ajax() 返回其創(chuàng)建的 XMLHttpRequest 對(duì)象。大多數(shù)情況下你無(wú)需直接操作該函數(shù),除非你需要操作不常用的選項(xiàng),以獲得更多的靈活性。
最簡(jiǎn)單的情況下,$.ajax() 可以不帶任何參數(shù)直接使用。
注意:所有的選項(xiàng)都可以通過(guò) $.ajaxSetup() 函數(shù)來(lái)全局設(shè)置。
語(yǔ)法
jQuery.ajax([settings])
參數(shù) | 描述 |
---|---|
settings | 可選。用于配置 Ajax 請(qǐng)求的鍵值對(duì)集合。 可以通過(guò) $.ajaxSetup() 設(shè)置任何選項(xiàng)的默認(rèn)值。 |
jQuery.get()
使用一個(gè)HTTP GET 請(qǐng)求從服務(wù)器加載數(shù)據(jù)。
jQuery.get(url [,data] [,success(data,textStatus,jqXHR)] [dtaType])
url 一個(gè)包含發(fā)送請(qǐng)求的URL
data 發(fā)送給服務(wù)器的字符串后鍵值對(duì)
success() 當(dāng)請(qǐng)求成功時(shí)回調(diào)的函數(shù)
dataType 從服務(wù)器返回的預(yù)期數(shù)據(jù)。
用法:
$.get("test.cgi", { name: "John", time: "2pm" }, function(data){ alert("Data Loaded: " + data); });
jQuery.getJSON()
使用一個(gè)HTTP GET 請(qǐng)求服務(wù)器加載JSON 編碼的數(shù)據(jù)。
jQuery.getJSON(url [,data] [,success(data,textStatus,jqXHR)])
url 一個(gè)包含發(fā)送請(qǐng)求的URL
data 發(fā)送給服務(wù)器的字符串后鍵值對(duì)
success() 當(dāng)請(qǐng)求成功時(shí)回調(diào)的函數(shù)
jQuery.getScript()
使用一個(gè)HTTP GET請(qǐng)求從服務(wù)器加載并執(zhí)行一個(gè)JavaScript文件。
jQuery.getScript(url[success(script,textStatus,jqXHR)])
url 一個(gè)包含發(fā)送請(qǐng)求的URL
data 發(fā)送給服務(wù)器的字符串后鍵值對(duì)
用法:
$.getScript("ajax/test.js", function(data, textStatus, jqxhr) { console.log(data); //data returned console.log(textStatus); //success console.log(jqxhr.status); //200 console.log('Load was performed.'); });
jQuery.post([settings])
使用一個(gè)HTTP POST請(qǐng)求從服務(wù)器加載數(shù)據(jù)。
jQuery.post(url[,data][,success(data,textStatus,jqXHR)][,dataType])
url 一個(gè)包含發(fā)送請(qǐng)求的URL
data 發(fā)送給服務(wù)器的字符串后鍵值對(duì)
success() 當(dāng)請(qǐng)求成功時(shí)回調(diào)的函數(shù)
用法:
$.post("test.php", { name: "John", time: "2pm" }, function(data) { alert("Data Loaded: " + data); });
.load()
從服務(wù)器載入數(shù)據(jù)并且將返回的HTML代碼并插入至匹配的元素中。
.load(url[,data][,complete(responseText,textStatus,XMLHttpRequest)])
url 一個(gè)包含發(fā)送請(qǐng)求的URL
data 發(fā)送給服務(wù)器的字符串后鍵值對(duì)
complete 當(dāng)請(qǐng)求成功時(shí)回調(diào)的函數(shù)
用法:
$('#result').load('ajax/test.html #container');
jQuery.ajax()
執(zhí)行一個(gè)異步的HTTP(ajax)的請(qǐng)求。
參數(shù):
url 類型: Sting 發(fā)送請(qǐng)求的地址(默認(rèn)當(dāng)前頁(yè)面)
type 類型:Sting (默認(rèn)為GET) 請(qǐng)求方式(”POST“或”GET“)
timeout 類型:Number 設(shè)置請(qǐng)求超時(shí)時(shí)間(毫秒),此設(shè)置默認(rèn)覆蓋全局。
async 類型:Boolean 默認(rèn)設(shè)置(true)默認(rèn)設(shè)置下所有請(qǐng)求均為一步請(qǐng)求,如果需要同步請(qǐng)求,設(shè)置為false。
beforeSend 類型:function 發(fā)送請(qǐng)求前可修改 XMLHttpRequest 對(duì)象的函數(shù),如添加自定義 HTTP 頭。XMLHttpRequest 對(duì)象是唯一的參數(shù)。
cache 類型:Boolean 默認(rèn)為(true) 設(shè)置為false 將不會(huì)從瀏覽器緩存中加載請(qǐng)求信息。
complete 類型:Function 請(qǐng)求完成后回調(diào)函數(shù),(請(qǐng)求成功或失敗時(shí)均調(diào)用)參數(shù): XMLHttpRequest 對(duì)象,成功信息字符串。function ( XMLHttpRequest, textStatus) {this; // the options for this ajax request}
contentType 類型為:String 發(fā)送信息至服務(wù)器時(shí)內(nèi)容編碼類型,默認(rèn)值適合大多數(shù)應(yīng)用場(chǎng)合。
data 類型:Object String 發(fā)送到服務(wù)器的數(shù)據(jù)。將自動(dòng)轉(zhuǎn)換為請(qǐng)求字符串格式,GET請(qǐng)求附加在URL后
dataType 類型:String 預(yù)期服務(wù)器返回的數(shù)據(jù)類型, ”xml“返回XML文檔。”html“返回純文本信息,包含script 元素。”script“返回純文本JavaScript 代碼,不會(huì)自動(dòng)緩存 結(jié)果。”json“返回JSON 數(shù)組。”jsonp“JSONP格式。
error 類型:function 請(qǐng)求失敗時(shí)將調(diào)用此方法。
global 類型:Boolean 是否觸發(fā)全局AJAX事件。默認(rèn)為(true) 設(shè)置為false 將不會(huì)觸發(fā)全局ajax 事件,可用于控制不同的AJAX事件。
ifModified 類型:Boolean 默認(rèn)為false 僅在服務(wù)器數(shù)據(jù)改變時(shí)獲取新數(shù)據(jù)。
processData 類型:Boolean 默認(rèn)為(true)默認(rèn)情況下,發(fā)送的數(shù)據(jù)發(fā)送的數(shù)據(jù)將被轉(zhuǎn)換為對(duì)象(技術(shù)上講并非字符串) 以配合默認(rèn)內(nèi)容類型 "application/x-www-form- urlencoded"。如果要發(fā)送 DOM 樹(shù)信息或其它不希望轉(zhuǎn)換的信息,請(qǐng)?jiān)O(shè)置為 false。
success 類型:Function 請(qǐng)求成功后回調(diào)函數(shù)。這個(gè)方法有兩個(gè)參數(shù):服務(wù)器返回?cái)?shù)據(jù),返回狀態(tài)。
$(document).ready(function() { jQuery("#clearCac").click(function() { jQuery.ajax({ url: "/Handle/Do.aspx", type: "post", data: { id: '0' }, dataType: "json", success: function(msg) { alert(msg); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); }, complete: function(XMLHttpRequest, textStatus) { this; // 調(diào)用本次AJAX請(qǐng)求時(shí)傳遞的options參數(shù) } }); });});
error事件返回的第一個(gè)參數(shù)XMLHttpRequest有一些有用的信息:
XMLHttpRequest.readyState:
狀態(tài)碼
0 - (未初始化)還沒(méi)有調(diào)用send()方法
1 - (載入)已調(diào)用send()方法,正在發(fā)送請(qǐng)求
2 - (載入完成)send()方法執(zhí)行完成,已經(jīng)接收到全部響應(yīng)內(nèi)容
3 - (交互)正在解析響應(yīng)內(nèi)容
4 - (完成)響應(yīng)內(nèi)容解析完成,可以在客戶端調(diào)用了
XMLHttpRequest.status:
1xx-信息提示
這些狀態(tài)代碼表示臨時(shí)的響應(yīng)。客戶端在收到常規(guī)響應(yīng)之前,應(yīng)準(zhǔn)備接收一個(gè)或多個(gè)1xx響應(yīng)。
100-繼續(xù)。
101-切換協(xié)議。
2xx-成功
這類狀態(tài)代碼表明服務(wù)器成功地接受了客戶端請(qǐng)求。
200-確定。客戶端請(qǐng)求已成功。
201-已創(chuàng)建。
202-已接受。
203-非權(quán)威性信息。
204-無(wú)內(nèi)容。
205-重置內(nèi)容。
206-部分內(nèi)容。
3xx-重定向
客戶端瀏覽器必須采取更多操作來(lái)實(shí)現(xiàn)請(qǐng)求。例如,瀏覽器可能不得不請(qǐng)求服務(wù)器上的不同的頁(yè)面,或通過(guò)代理服務(wù)器重復(fù)該請(qǐng)求。
301-對(duì)象已永久移走,即永久重定向。
302-對(duì)象已臨時(shí)移動(dòng)。
304-未修改。
307-臨時(shí)重定向。
4xx-客戶端錯(cuò)誤
發(fā)生錯(cuò)誤,客戶端似乎有問(wèn)題。例如,客戶端請(qǐng)求不存在的頁(yè)面,客戶端未提供有效的身份驗(yàn)證信息。400-錯(cuò)誤的請(qǐng)求。
401-訪問(wèn)被拒絕。IIS定義了許多不同的401錯(cuò)誤,它們指明更為具體的錯(cuò)誤原因。這些具體的錯(cuò)誤代碼在瀏覽器中顯示,但不在IIS日志中顯示:
401.1-登錄失敗。
401.2-服務(wù)器配置導(dǎo)致登錄失敗。
401.3-由于ACL對(duì)資源的限制而未獲得授權(quán)。
401.4-篩選器授權(quán)失敗。
401.5-ISAPI/CGI應(yīng)用程序授權(quán)失敗。
401.7–訪問(wèn)被Web服務(wù)器上的URL授權(quán)策略拒絕。這個(gè)錯(cuò)誤代碼為IIS6.0所專用。
403-禁止訪問(wèn):IIS定義了許多不同的403錯(cuò)誤,它們指明更為具體的錯(cuò)誤原因:
403.1-執(zhí)行訪問(wèn)被禁止。
403.2-讀訪問(wèn)被禁止。
403.3-寫(xiě)訪問(wèn)被禁止。
403.4-要求SSL。
403.5-要求SSL128。
403.6-IP地址被拒絕。
403.7-要求客戶端證書(shū)。
403.8-站點(diǎn)訪問(wèn)被拒絕。
403.9-用戶數(shù)過(guò)多。
403.10-配置無(wú)效。
403.11-密碼更改。
403.12-拒絕訪問(wèn)映射表。
403.13-客戶端證書(shū)被吊銷。
403.14-拒絕目錄列表。
403.15-超出客戶端訪問(wèn)許可。
403.16-客戶端證書(shū)不受信任或無(wú)效。
403.17-客戶端證書(shū)已過(guò)期或尚未生效。
403.18-在當(dāng)前的應(yīng)用程序池中不能執(zhí)行所請(qǐng)求的URL。這個(gè)錯(cuò)誤代碼為IIS6.0所專用。
403.19-不能為這個(gè)應(yīng)用程序池中的客戶端執(zhí)行CGI。這個(gè)錯(cuò)誤代碼為IIS6.0所專用。
403.20-Passport登錄失敗。這個(gè)錯(cuò)誤代碼為IIS6.0所專用。
404-未找到。
404.0-(無(wú))–沒(méi)有找到文件或目錄。
404.1-無(wú)法在所請(qǐng)求的端口上訪問(wèn)Web站點(diǎn)。
404.2-Web服務(wù)擴(kuò)展鎖定策略阻止本請(qǐng)求。
404.3-MIME映射策略阻止本請(qǐng)求。
405-用來(lái)訪問(wèn)本頁(yè)面的HTTP謂詞不被允許(方法不被允許)
406-客戶端瀏覽器不接受所請(qǐng)求頁(yè)面的MIME類型。
407-要求進(jìn)行代理身份驗(yàn)證。
412-前提條件失敗。
413–請(qǐng)求實(shí)體太大。
414-請(qǐng)求URI太長(zhǎng)。
415–不支持的媒體類型。
416–所請(qǐng)求的范圍無(wú)法滿足。
417–執(zhí)行失敗。
423–鎖定的錯(cuò)誤。
5xx-服務(wù)器錯(cuò)誤
服務(wù)器由于遇到錯(cuò)誤而不能完成該請(qǐng)求。
500-內(nèi)部服務(wù)器錯(cuò)誤。
500.12-應(yīng)用程序正忙于在Web服務(wù)器上重新啟動(dòng)。
500.13-Web服務(wù)器太忙。
500.15-不允許直接請(qǐng)求Global.asa。
500.16–UNC授權(quán)憑據(jù)不正確。這個(gè)錯(cuò)誤代碼為IIS6.0所專用。
500.18–URL授權(quán)存儲(chǔ)不能打開(kāi)。這個(gè)錯(cuò)誤代碼為IIS6.0所專用。
500.100-內(nèi)部ASP錯(cuò)誤。
501-頁(yè)眉值指定了未實(shí)現(xiàn)的配置。
502-Web服務(wù)器用作網(wǎng)關(guān)或代理服務(wù)器時(shí)收到了無(wú)效響應(yīng)。
502.1-CGI應(yīng)用程序超時(shí)。
502.2-CGI應(yīng)用程序出錯(cuò)。application.
503-服務(wù)不可用。這個(gè)錯(cuò)誤代碼為IIS6.0所專用。
504-網(wǎng)關(guān)超時(shí)。
505-HTTP版本不受支持。
jQuery.param()
創(chuàng)建一個(gè)數(shù)組,一個(gè)普通的對(duì)象,或一個(gè)jQuery對(duì)象的序列化表現(xiàn)形似,用于URL查詢字符串或Ajax請(qǐng)求。
jQuery.param(obj)
obj 一個(gè)用來(lái)序列化的一個(gè)數(shù)組,一個(gè)普通的對(duì)象,或一個(gè)jQuery對(duì)象。
jQuery.param( obj, traditional )
obj 一個(gè)用來(lái)序列化的一個(gè)數(shù)組,一個(gè)普通的對(duì)象,或一個(gè)jQuery對(duì)象。
traditional
一個(gè)布爾值,指示是否執(zhí)行了傳統(tǒng)的“shallow”的序列化。
$.param({ a: [2,3,4] }) // "a[]=2&a[]=3&a[]=4"
$.param({ a: { b:1,c:2 }, d: [3,4,{ e:5 }] }) // "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"