ajax原理總結(jié)附簡(jiǎn)單實(shí)例及其優(yōu)點(diǎn)
更新時(shí)間:2014年04月18日 11:22:48 作者:
在工作中用了Ajax N多次了,也看過(guò)一些相關(guān)方面的書(shū)籍,也算是認(rèn)識(shí)了它,本文對(duì)ajax原理坐下總結(jié),需要的朋友可以參考下
在工作中用了Ajax N多次了,也看過(guò)一些相關(guān)方面的書(shū)籍,也算是認(rèn)識(shí)了它,但是一直沒(méi)有認(rèn)真總結(jié)和整理過(guò)相關(guān)的東東,失?。?
近有閑情,將之總結(jié)如下:
【名稱】
Ajax是Asynchronous JavaScript and XML(以及 DHTML 等)的縮寫。
詳情請(qǐng)移步Ajax: A New Approach to Web Applications
【原理】
簡(jiǎn)單一些,就是通過(guò)使用XmlHttpRequest對(duì)象向服務(wù)器發(fā)送異步請(qǐng)求,獲取返回的數(shù)據(jù),并使用Javascript和DOM操作頁(yè)面內(nèi)的元素,從而達(dá)到改變頁(yè)面內(nèi)容的目的。
其中XmlHttpRequest對(duì)象是關(guān)鍵,因?yàn)樗С之惒秸?qǐng)求。XMLHttpRequest是完全用來(lái)向服務(wù)器發(fā)出一個(gè)請(qǐng)求的。它所包含的方法和屬性如下所示:
方法:
abort() 導(dǎo)致當(dāng)前正在請(qǐng)求被取消
getAllResponseHeaders() 返回一個(gè)字符串,包含氖 響應(yīng)標(biāo)頭的名稱和值
getResponseHeader(name) 返回指定的響應(yīng)標(biāo)頭的值
open(method, url, async, username, password) 設(shè)置請(qǐng)求的方法和目標(biāo)URL。請(qǐng)求可以聲明為同步的(可選),也可以給需要基于窗口誰(shuí)的請(qǐng)求而提供用戶名和口令(可選)
send(content) 發(fā)起帶有指定內(nèi)容(可選)的請(qǐng)求
setRequestHeader(name, value) 利用指定的名稱和值,設(shè)置一個(gè)請(qǐng)求標(biāo)頭
屬性:
onreadystatechange 指派在請(qǐng)求的狀態(tài)發(fā)生變化時(shí)所使用的事件處理程序
readyState 一個(gè)整數(shù)值,指示請(qǐng)求的狀態(tài)如下:
0—-未初始化
1—-正在加載
2—-已加載
3—-交互
4—–完成
responseText 在響應(yīng)里所返回的內(nèi)容
responseXML 如果內(nèi)容是XML,就根據(jù)內(nèi)容而創(chuàng)建XML DOM
status 從服務(wù)器所返回的響應(yīng)狀態(tài)碼。例如:200表示成功,404表示未找到,參考HTTP規(guī)范
statusText 響應(yīng)所返回的狀態(tài)文本消息
對(duì)于此對(duì)象其它介紹請(qǐng)移步:XMLHttpRequest概述
【所包含的技術(shù)】
· 基于XHTML和CSS標(biāo)準(zhǔn)的表示;
· 使用Document Object Model進(jìn)行動(dòng)態(tài)顯示和交互;
· 使用XMLHttpRequest與服務(wù)器進(jìn)行異步通信;
· 使用JavaScript綁定一切;
· 使用XML和XSLT;交換和操作數(shù)據(jù)。
以上的技術(shù)都是一些廣泛使用了的技術(shù),都屬于比較舊的技術(shù),ajax是這幾種技術(shù)的結(jié)合體。
【簡(jiǎn)單實(shí)例】
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function ajax() {
var xmlHttp;
// 依據(jù)對(duì)象判斷,而不是依據(jù)瀏覽器
if(window.XMLHttpRequest) {
xmlHttp=new XMLHttpRequest();//mozilla瀏覽器
}else if(window.ActiveXObject){
try{
xmlHttp=new ActiveXObject("Msxmlx2.XMLHTTP"); //IE老版本
}catch(e){}
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); //IE新版本
}catch(e){}
if(!xmlHttp){
window.alert("不能創(chuàng)建XMLHttpRequest對(duì)象實(shí)列");
return false;
}
}
if (!xmlHttp) {
alert("創(chuàng)建XMLHttpRequest對(duì)象失??!");
return false;
}
xmlHttp.open('POST', 'index.php?get_a=2&get_b=3', false);
xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8;');
xmlHttp.send("post_a=1&post_b=2");
xmlHttp.onreadystatechange = function() {
alert(xmlHttp.readyState);
}
if(xmlHttp.readyState == 4){ //判斷對(duì)象狀態(tài)
var content_obj = document.getElementById("content");
content_obj.innerHTML = "正在處理數(shù)據(jù)...";
if(xmlHttp.status == 200){ //信息已經(jīng)成功返回,開(kāi)始處理信息
var returnStr = xmlHttp.responseText;
content_obj.innerHTML = returnStr;
}else{ //頁(yè)面不正常
content_obj.innerHTML = "您所請(qǐng)求的頁(yè)面存在異常!";
}
}
}
</script>
</head>
<body>
<input type="button" value="ajax" onclick="ajax();" />
<div id="content">ajax內(nèi)容顯示區(qū)</div>
</body>
</html>
切記:當(dāng)發(fā)起一個(gè)POST請(qǐng)求時(shí),需要對(duì)報(bào)頭 Content-type(內(nèi)容類型)進(jìn)行設(shè)置。這樣,服務(wù)器就知道如何來(lái)處理上傳的內(nèi)容。如果要模擬通過(guò)HTTP協(xié)議的POST方式來(lái)發(fā)送表單,則應(yīng)將內(nèi)容類型設(shè)置為application/x-www-form-urlencoded。
【優(yōu)點(diǎn)】
頁(yè)面無(wú)刷新,用戶體驗(yàn)好;
異步,不打斷用戶操作,響應(yīng)速度快;
“按需取數(shù)據(jù)”,減少冗余請(qǐng)求,減輕服務(wù)器負(fù)擔(dān);
基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),無(wú)需額外的插件;
可以使數(shù)據(jù)和表現(xiàn)分離;
【存在的問(wèn)題】
一些設(shè)備還不支持
開(kāi)發(fā)成本提高
使back按鈕失效,用戶操作后無(wú)法返回;
對(duì)流媒體支持沒(méi)有flash之流好;
對(duì)搜索引擎不友好
破壞程序的異常機(jī)制
存在一些安全問(wèn)題,暴露了一些程序接口和數(shù)據(jù)邏輯
近有閑情,將之總結(jié)如下:
【名稱】
Ajax是Asynchronous JavaScript and XML(以及 DHTML 等)的縮寫。
詳情請(qǐng)移步Ajax: A New Approach to Web Applications
【原理】
簡(jiǎn)單一些,就是通過(guò)使用XmlHttpRequest對(duì)象向服務(wù)器發(fā)送異步請(qǐng)求,獲取返回的數(shù)據(jù),并使用Javascript和DOM操作頁(yè)面內(nèi)的元素,從而達(dá)到改變頁(yè)面內(nèi)容的目的。
其中XmlHttpRequest對(duì)象是關(guān)鍵,因?yàn)樗С之惒秸?qǐng)求。XMLHttpRequest是完全用來(lái)向服務(wù)器發(fā)出一個(gè)請(qǐng)求的。它所包含的方法和屬性如下所示:
方法:
abort() 導(dǎo)致當(dāng)前正在請(qǐng)求被取消
getAllResponseHeaders() 返回一個(gè)字符串,包含氖 響應(yīng)標(biāo)頭的名稱和值
getResponseHeader(name) 返回指定的響應(yīng)標(biāo)頭的值
open(method, url, async, username, password) 設(shè)置請(qǐng)求的方法和目標(biāo)URL。請(qǐng)求可以聲明為同步的(可選),也可以給需要基于窗口誰(shuí)的請(qǐng)求而提供用戶名和口令(可選)
send(content) 發(fā)起帶有指定內(nèi)容(可選)的請(qǐng)求
setRequestHeader(name, value) 利用指定的名稱和值,設(shè)置一個(gè)請(qǐng)求標(biāo)頭
屬性:
onreadystatechange 指派在請(qǐng)求的狀態(tài)發(fā)生變化時(shí)所使用的事件處理程序
readyState 一個(gè)整數(shù)值,指示請(qǐng)求的狀態(tài)如下:
0—-未初始化
1—-正在加載
2—-已加載
3—-交互
4—–完成
responseText 在響應(yīng)里所返回的內(nèi)容
responseXML 如果內(nèi)容是XML,就根據(jù)內(nèi)容而創(chuàng)建XML DOM
status 從服務(wù)器所返回的響應(yīng)狀態(tài)碼。例如:200表示成功,404表示未找到,參考HTTP規(guī)范
statusText 響應(yīng)所返回的狀態(tài)文本消息
對(duì)于此對(duì)象其它介紹請(qǐng)移步:XMLHttpRequest概述
【所包含的技術(shù)】
· 基于XHTML和CSS標(biāo)準(zhǔn)的表示;
· 使用Document Object Model進(jìn)行動(dòng)態(tài)顯示和交互;
· 使用XMLHttpRequest與服務(wù)器進(jìn)行異步通信;
· 使用JavaScript綁定一切;
· 使用XML和XSLT;交換和操作數(shù)據(jù)。
以上的技術(shù)都是一些廣泛使用了的技術(shù),都屬于比較舊的技術(shù),ajax是這幾種技術(shù)的結(jié)合體。
【簡(jiǎn)單實(shí)例】
復(fù)制代碼 代碼如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function ajax() {
var xmlHttp;
// 依據(jù)對(duì)象判斷,而不是依據(jù)瀏覽器
if(window.XMLHttpRequest) {
xmlHttp=new XMLHttpRequest();//mozilla瀏覽器
}else if(window.ActiveXObject){
try{
xmlHttp=new ActiveXObject("Msxmlx2.XMLHTTP"); //IE老版本
}catch(e){}
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); //IE新版本
}catch(e){}
if(!xmlHttp){
window.alert("不能創(chuàng)建XMLHttpRequest對(duì)象實(shí)列");
return false;
}
}
if (!xmlHttp) {
alert("創(chuàng)建XMLHttpRequest對(duì)象失??!");
return false;
}
xmlHttp.open('POST', 'index.php?get_a=2&get_b=3', false);
xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8;');
xmlHttp.send("post_a=1&post_b=2");
xmlHttp.onreadystatechange = function() {
alert(xmlHttp.readyState);
}
if(xmlHttp.readyState == 4){ //判斷對(duì)象狀態(tài)
var content_obj = document.getElementById("content");
content_obj.innerHTML = "正在處理數(shù)據(jù)...";
if(xmlHttp.status == 200){ //信息已經(jīng)成功返回,開(kāi)始處理信息
var returnStr = xmlHttp.responseText;
content_obj.innerHTML = returnStr;
}else{ //頁(yè)面不正常
content_obj.innerHTML = "您所請(qǐng)求的頁(yè)面存在異常!";
}
}
}
</script>
</head>
<body>
<input type="button" value="ajax" onclick="ajax();" />
<div id="content">ajax內(nèi)容顯示區(qū)</div>
</body>
</html>
切記:當(dāng)發(fā)起一個(gè)POST請(qǐng)求時(shí),需要對(duì)報(bào)頭 Content-type(內(nèi)容類型)進(jìn)行設(shè)置。這樣,服務(wù)器就知道如何來(lái)處理上傳的內(nèi)容。如果要模擬通過(guò)HTTP協(xié)議的POST方式來(lái)發(fā)送表單,則應(yīng)將內(nèi)容類型設(shè)置為application/x-www-form-urlencoded。
【優(yōu)點(diǎn)】
頁(yè)面無(wú)刷新,用戶體驗(yàn)好;
異步,不打斷用戶操作,響應(yīng)速度快;
“按需取數(shù)據(jù)”,減少冗余請(qǐng)求,減輕服務(wù)器負(fù)擔(dān);
基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),無(wú)需額外的插件;
可以使數(shù)據(jù)和表現(xiàn)分離;
【存在的問(wèn)題】
一些設(shè)備還不支持
開(kāi)發(fā)成本提高
使back按鈕失效,用戶操作后無(wú)法返回;
對(duì)流媒體支持沒(méi)有flash之流好;
對(duì)搜索引擎不友好
破壞程序的異常機(jī)制
存在一些安全問(wèn)題,暴露了一些程序接口和數(shù)據(jù)邏輯
您可能感興趣的文章:
- ajax中文亂碼的各種解決辦法總結(jié)
- ajax問(wèn)題總結(jié) 比較全
- Ajax與JSON的一些學(xué)習(xí)總結(jié)
- ajax請(qǐng)求get與post的區(qū)別總結(jié)
- ajax 入門基礎(chǔ)之 XMLHttpRequest對(duì)象總結(jié)
- 關(guān)于ajax對(duì)象一些常用屬性、事件和方法大小寫比較常見(jiàn)的問(wèn)題總結(jié)
- 總結(jié)AJAX相關(guān)JS代碼片段和瀏覽器模型
- 關(guān)于Ajax技術(shù)原理的3點(diǎn)總結(jié)
- 使用ajax異步提交表單的幾種方法總結(jié)
- 初學(xué)者必看的Ajax總結(jié)篇
相關(guān)文章
IE8用ajax訪問(wèn)不能每次都刷新的問(wèn)題
這篇文章主要介紹了IE8用ajax訪問(wèn)不能每次都刷新的問(wèn)題 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
Ajax使用異步對(duì)象發(fā)送請(qǐng)求方案詳解
Ajax的原理是通過(guò)XmlHttpRequest對(duì)象來(lái)向服務(wù)器發(fā)異步請(qǐng)求,從服務(wù)器獲得數(shù)據(jù),然后用JavaScript來(lái)操作DOM而更新頁(yè)面,這篇文章主要介紹了Ajax使用異步對(duì)象發(fā)送請(qǐng)求簡(jiǎn)介,需要的朋友可以參考下2024-04-04
Ajax讀取txt并對(duì)txt內(nèi)容進(jìn)行分頁(yè)顯示功能
這篇文章給大家介紹了Ajax讀取txt并對(duì)txt內(nèi)容進(jìn)行分頁(yè)顯示功能,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11
ajax異步讀取后臺(tái)傳遞回的下拉選項(xiàng)的值方法
今天小編就為大家分享一篇ajax異步讀取后臺(tái)傳遞回的下拉選項(xiàng)的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Ajax實(shí)現(xiàn)動(dòng)態(tài)顯示并操作表信息的方法
今天小編就為大家分享一篇Ajax實(shí)現(xiàn)動(dòng)態(tài)顯示并操作表信息的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Ajax請(qǐng)求WebService跨域問(wèn)題的解決方案
這篇文章主要介紹了Ajax請(qǐng)求WebService跨域問(wèn)題的解決方案,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
淺析json與jsonp區(qū)別及通過(guò)ajax獲得json數(shù)據(jù)后格式的轉(zhuǎn)換
一言以蔽之,json返回的是一串?dāng)?shù)據(jù);而jsonp返回的是腳本代碼(包含一個(gè)函數(shù)調(diào)用);接下來(lái)通過(guò)本文給大家介紹json與jsonp區(qū)別及通過(guò)ajax獲得json數(shù)據(jù)后格式的轉(zhuǎn)換,需要的朋友參考下2016-03-03
AJax實(shí)現(xiàn)類似百度搜索欄的功能 (面試多見(jiàn))
下面是ajax實(shí)現(xiàn)一個(gè)簡(jiǎn)單的百度搜索欄的功能,當(dāng)用戶在上面的輸入框中鍵入字符時(shí),會(huì)執(zhí)行函數(shù) "showHint()" 。下文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2016-11-11

