jQuery對(duì)ajax進(jìn)行了3層封裝。最底層為$.ajax()方法、第2層為load(),$get(),$post()方法、最高層為$.getScript(),$.getJSON()方法。
load方法通常用于從web服務(wù)器中獲取靜態(tài)的數(shù)據(jù)文件,主要功能是載入遠(yuǎn)程HTML代碼并插入DOM中,結(jié)構(gòu)為
load(url, [, data] [, callback])
url為請(qǐng)求HTML頁面的URL地址,data為發(fā)送給服務(wù)器的key/value數(shù)據(jù),callbakc為請(qǐng)求完成時(shí)的回調(diào)函數(shù)。
這個(gè)方法可以這么用:
$("#resText").load("test.html");
調(diào)用上面的代碼后,test.html頁面就會(huì)被載入到DOM元素中。
在實(shí)際開發(fā)中最常用的是get和post方法,這兩個(gè)方法是jQuery的全局函數(shù),之前講的所以方法都是對(duì)jQuery對(duì)象進(jìn)行操作。
$.get()方法使用GET方式進(jìn)行異步請(qǐng)求,結(jié)構(gòu)為:
$.get(url [, data] [, callback] [, type]);
url為請(qǐng)求頁面的url地址,data為發(fā)送至服務(wù)器的key/value數(shù)據(jù),callback為載入成功時(shí)的回調(diào)函數(shù),type為服務(wù)器端返回內(nèi)容的格式。
其它參數(shù)都是很簡(jiǎn)單的,主要是看一下回調(diào)函數(shù)有哪些參數(shù):
function(data, textStatus){
//data : 返回的內(nèi)容,可以是xml, json, html片段等
//textStatus : 請(qǐng)求狀態(tài): success, error, notmodified, timeout4種
}
$.get()和$.post()只有等textStatus狀態(tài)為success時(shí)回調(diào)函數(shù)才會(huì)被調(diào)用。
如果返回的是xml文檔,那么可以用jquery中的attr,find filter方法進(jìn)行處理。
$post()方法實(shí)際上跟$get()方法的使用方法差不多,只是背后的原理不同。
接下來講一下jQuery提供的最高層方法getScript和getJSON方法。
有時(shí)候,在頁面初次加載的時(shí)候載入所有的js文件是沒有必要的,我們可以動(dòng)態(tài)引入js文件:
$(document.createElement("script")).attr("src", "test.js").appendTo("head");//方法1
$("<script type='text/javascript' src='test.js' />").appendTo("head");//方法2
$(function(){
$("#send").click(function(){
$.getScript("test.js");
});
}).ready();//方法3
$.getScript方法也有回調(diào)函數(shù),在js文件成功加載之后調(diào)用。方法3加載完JS文件之后,js文件會(huì)自動(dòng)執(zhí)行。
$.getJSON方法的使用方式和getScript一樣,但是前者的回調(diào)函數(shù)一般需要寫明要如何處理回載的JSON數(shù)據(jù)?;卣{(diào)函數(shù)有一個(gè)data的參數(shù),表示JSON對(duì)象。
要遍歷JSON對(duì)象可以使用jQuery中的$.each方法,這個(gè)方法用于遍歷對(duì)象和數(shù)組。
$.each方法第1個(gè)參數(shù)為一個(gè)數(shù)組或一個(gè)對(duì)象,第2個(gè)參數(shù)為一個(gè)回調(diào)函數(shù),回調(diào)函數(shù)擁有2個(gè)參數(shù):第1個(gè)為對(duì)象的成員或數(shù)組的索引,第2個(gè)為對(duì)應(yīng)變量或內(nèi)容。如果回調(diào)函數(shù)中返回false那么遍歷將結(jié)束。
將下來講最底層的方法$.ajax方法,jQuery中所有的ajax方法都是通過這個(gè)方法實(shí)現(xiàn)的,也就是說這個(gè)方法可以替換之前講的所有ajax方法。
它的結(jié)構(gòu)為:
$.ajax(option);
這個(gè)方法只有一個(gè)參數(shù),參數(shù)是一個(gè)對(duì)象,這個(gè)對(duì)象包含了所需要的請(qǐng)求設(shè)置,以及回調(diào)函數(shù)等信息,參數(shù)以key/value的形式存在,所有的參數(shù)都是可選的。重要的參數(shù)有url,type,complete,success等。
在使用jQuery之前,網(wǎng)頁異步提交表單的時(shí)候只能把每個(gè)表單元素的值一個(gè)一個(gè)讀出來然后格式化后發(fā)送到服務(wù)器,現(xiàn)在可以使用jQuery中的serialize方法。
$("#send").click(function(){
$.get("get1.php", $("#form1").serialize(), function(data, textStatus){
$("#resText").html(data);
});
});
調(diào)用這個(gè)方法就相當(dāng)表將表格里的數(shù)據(jù)用key/value方法發(fā)送給服務(wù)器端了。如果修改了表單,增加了表單元素,那么也不用將這段代碼進(jìn)行修改。
jQuery還為ajax請(qǐng)求設(shè)置了全局事件。$.ajaxStart()和$.ajaxStop(),分別在網(wǎng)頁發(fā)起ajax請(qǐng)求和ajax請(qǐng)求完成時(shí)調(diào)用,這2個(gè)函數(shù)的參數(shù)為一個(gè)回調(diào)函數(shù)。
關(guān)于jQuery暫時(shí)先學(xué)習(xí)到這里,我認(rèn)為寫這些文章跟寫程序一樣,從來不會(huì)完成,應(yīng)該要一直更新,目前jQuery學(xué)習(xí)告一段落,如果以后的項(xiàng)目中還需要學(xué)習(xí)關(guān)于jQuery新的知識(shí),我一定再把學(xué)習(xí)心得寫上來。