jQuery對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為請求HTML頁面的URL地址码倦,data為發(fā)送給服務(wù)器的key/value數(shù)據(jù),callbakc為請求完成時(shí)的回調(diào)函數(shù)锭碳。
這個(gè)方法可以這么用:
$("#resText").load("test.html");
調(diào)用上面的代碼后袁稽,test.html頁面就會被載入到DOM元素中。
在實(shí)際開發(fā)中最常用的是get和post方法擒抛,這兩個(gè)方法是jQuery的全局函數(shù)运提,之前講的所以方法都是對jQuery對象進(jìn)行操作蝗柔。
$.get()方法使用GET方式進(jìn)行異步請求闻葵,結(jié)構(gòu)為:
$.get(url [, data] [, callback] [, type]);
url為請求頁面的url地址民泵,data為發(fā)送至服務(wù)器的key/value數(shù)據(jù),callback為載入成功時(shí)的回調(diào)函數(shù)槽畔,type為服務(wù)器端返回內(nèi)容的格式栈妆。
其它參數(shù)都是很簡單的,主要是看一下回調(diào)函數(shù)有哪些參數(shù):
function(data, textStatus){
//data : 返回的內(nèi)容厢钧,可以是xml, json, html片段等
//textStatus : 請求狀態(tài): success, error, notmodified, timeout4種
}
$.get()和$.post()只有等textStatus狀態(tài)為success時(shí)回調(diào)函數(shù)才會被調(diào)用鳞尔。
如果返回的是xml文檔,那么可以用jquery中的attr,find filter方法進(jìn)行處理早直。
$post()方法實(shí)際上跟$get()方法的使用方法差不多寥假,只是背后的原理不同。
接下來講一下jQuery提供的最高層方法getScript和getJSON方法霞扬。
有時(shí)候糕韧,在頁面初次加載的時(shí)候載入所有的js文件是沒有必要的,我們可以動態(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文件會自動執(zhí)行斧拍。
$.getJSON方法的使用方式和getScript一樣雀扶,但是前者的回調(diào)函數(shù)一般需要寫明要如何處理回載的JSON數(shù)據(jù)∷列冢回調(diào)函數(shù)有一個(gè)data的參數(shù)愚墓,表示JSON對象。
要遍歷JSON對象可以使用jQuery中的$.each方法昂勉,這個(gè)方法用于遍歷對象和數(shù)組浪册。
$.each方法第1個(gè)參數(shù)為一個(gè)數(shù)組或一個(gè)對象,第2個(gè)參數(shù)為一個(gè)回調(diào)函數(shù)硼啤,回調(diào)函數(shù)擁有2個(gè)參數(shù):第1個(gè)為對象的成員或數(shù)組的索引议经,第2個(gè)為對應(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è)對象,這個(gè)對象包含了所需要的請求設(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請求設(shè)置了全局事件。$.ajaxStart()和$.ajaxStop()吨铸,分別在網(wǎng)頁發(fā)起ajax請求和ajax請求完成時(shí)調(diào)用行拢,這2個(gè)函數(shù)的參數(shù)為一個(gè)回調(diào)函數(shù)。
關(guān)于jQuery暫時(shí)先學(xué)習(xí)到這里诞吱,我認(rèn)為寫這些文章跟寫程序一樣舟奠,從來不會完成,應(yīng)該要一直更新狐胎,目前jQuery學(xué)習(xí)告一段落鸭栖,如果以后的項(xiàng)目中還需要學(xué)習(xí)關(guān)于jQuery新的知識,我一定再把學(xué)習(xí)心得寫上來握巢。