Ajax的原理簡單來說通過XmlHttpRequest對象來向服務(wù)器發(fā)異步請求丁屎,從服務(wù)器獲得數(shù)據(jù)踱稍,然后用javascript來操作DOM而更新頁面枷恕。這其中最關(guān)鍵的一步就是從服務(wù)器獲得請求數(shù)據(jù)述雾。
XMLHttpRequest是ajax的核心機(jī)制友酱,它是在IE5中首先引入的,是一種支持異步請求的技術(shù)刑顺。簡單的說氯窍,也就是javascript可以及時向服務(wù)器提出請求和處理響應(yīng),而不阻塞用戶蹲堂。達(dá)到無刷新的效果狼讨。
所以我們先從XMLHttpRequest講起,來看看它的工作原理柒竞。
首先政供,我們先來看看XMLHttpRequest這個對象的屬性。
它的屬性有:
onreadystatechange 每次狀態(tài)改變所觸發(fā)事件的事件處理程序朽基。
responseText 從服務(wù)器進(jìn)程返回?cái)?shù)據(jù)的字符串形式布隔。
responseXML 從服務(wù)器進(jìn)程返回的DOM兼容的文檔數(shù)據(jù)對象。
status 從服務(wù)器返回的數(shù)字代碼稼虎,比如常見的404(未找到)和200(已就緒)
status Text 伴隨狀態(tài)碼的字符串信息
readyState 對象狀態(tài)值
0 (未初始化) 對象已建立衅檀,但是尚未初始化(尚未調(diào)用open方法)
1 (初始化) 對象已建立,尚未調(diào)用send方法
2 (發(fā)送數(shù)據(jù)) send方法已調(diào)用霎俩,但是當(dāng)前的狀態(tài)及http頭未知
3 (數(shù)據(jù)傳送中) 已接收部分?jǐn)?shù)據(jù)哀军,因?yàn)轫憫?yīng)及http頭不全,這時通過responseBody和responseText獲取部分?jǐn)?shù)據(jù)會出現(xiàn)錯誤打却,
4 (完成) 數(shù)據(jù)接收完畢,此時可以通過通過responseXml和responseText獲取完整的回應(yīng)數(shù)據(jù)
來杉适,跟著我手寫一個看
GET:
var xhr = new XMLHttpRequset();
xhr.open("GET", url, true); // 第三個參數(shù)是否要異步,一般都異步
xhr.onreadystatechange(){
if(xhr.readyState == 4 && xhr.status == 200){
var res = xhr.responseText;
//執(zhí)行dom操作柳击,把返回值賦給dom元素
}
}
xhr.send(null);
POST:
var xhr = new XMLHttpRequset();
xhr.open("POST", url, true); // 第三個參數(shù)是否要異步猿推,一般都異步
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//設(shè)置請求報文頭
xhr.onreadystatechange(){
if(xhr.readyState == 4 && xhr.status == 200){
var res = xhr.responseText;
//執(zhí)行dom操作,把返回值賦給dom元素
}
}
xhr.send("txtName=ss&txtpwd=123"); //參數(shù)名=參數(shù)值