一、介紹
1谋币、什么是ajax
Asynchronous
Javascript
And
Xml
利用javascript和xml實現(xiàn)異步傳輸?shù)募夹g(shù)
二仗扬、ajax對象
1、創(chuàng)建ajax對象
如果寫開發(fā)ajax程序蕾额,必須 首先創(chuàng)建一個ajax對象早芭,創(chuàng)建方式:
1)基于IE內(nèi)核系列
var xhr = new ActiveXObject(‘Microsoft.XMLHTTP’);
Alert(xhr.readyState);
2)基于W3C標(biāo)準(zhǔn)
Var xhr = new XMLHttpRequest();
Alert(xhr.readyState);
解決兼容
方法一:If(window.navigator.userAgent == ‘’) {} else {}
方法二:如果是IE高版本或w3c瀏覽器,會直接創(chuàng)建Ajax對象并返回诅蝶;否則會向下執(zhí)行第二個try語句
function createXhr()
{
Try {
Return new XMLHttpRequest();
} catch(e) {}
Try{
Return new ActiveXObject();
} catch(e) {}
Alert(‘請更換瀏覽器’);
}
2退个、Ajax對象的相關(guān)屬性和方法
1)方法
i. xhr.open(method,url) 初始化Ajax對象
Method 請求方式(get post)
Url 請求頁面地址
ii. Xhr.setRequestHeader(header,value)設(shè)置請求頭(post方式需要)
header 頭名
Value 值
例如:
Xhr.open(‘post’,’.php’);
xhr.setRequestHeader(‘Content-Type’,’Application/x-www-form-urlencoded’);
iii. Xhr.send(content)發(fā)送Ajax請求
Content 請求時傳遞的參數(shù)
2)屬性
i. onreadystatechange 當(dāng)ajax對象的狀態(tài)碼發(fā)生改變時所觸發(fā)的回調(diào)函數(shù)
ii. readyState ajax對象的狀態(tài)碼
0表示創(chuàng)建xhr(ajax對象)成功,但是沒有初始化 new XMLHttpRequest()
1表示對象已經(jīng)初始化调炬,但未發(fā)送請求 open
2表示對象已經(jīng)發(fā)送請求 send
3表示對象已經(jīng)接收部分服務(wù)器返回的數(shù)據(jù)
4表示接收數(shù)據(jù)完畢 (常用)
iii. status ajax對象的響應(yīng)狀態(tài)碼(http響應(yīng)狀態(tài)碼)
200表示請求成功(OK)
304表示從緩存中讀扔镉(Not Modified文檔的內(nèi)容)
400表示語義有錯
403表示拒絕提供些服務(wù),forbidden
404表示請求資源不存在
408表示請求超時
iv. statusText ajax對象的響應(yīng)狀態(tài)文本 OK NOTFOUND
v. responseText ajax對象的響應(yīng)內(nèi)容(文本)
vi. responseXML ajax對象的響應(yīng)內(nèi)容(XML對象)
三筐眷、發(fā)送GET請求
語法
Var xhr = createXhr();
Xhr.open(get’,url);
xhr.onreadystatechange=function() {
If(xhr.readyState == 4 && xhr.status == 200) {
xhr.responseText;
}
};
Xhr.send(null);
四黎烈、發(fā)送POST請求
1、語法
Var xhr = createXhr();
Xhr.open(‘post’,url);
var str = ‘s1=’+1+’&s2=’+2;
xhr.setRequestHeader(‘Content-Type’,’Application/x-www-form-urlencoded’);
Xhr.onreadystatechange=function() {
If(xhr.readyState == 4 && xhr.status == 200) {
Xhr.responseText;
}
};
Xhr.send(str);
2、get與post的區(qū)別
a) get傳遞的數(shù)據(jù)不超過2kb post傳遞的數(shù)據(jù)理論上沒有限制
b) get傳遞的參數(shù)附加在url地址后面 post傳遞的參數(shù)附加在請求空白行的下面
c) get傳遞的數(shù)據(jù)類型為文本類型 post傳遞的數(shù)據(jù)類型為文本或二進(jìn)制數(shù)據(jù)
五照棋、解決ajax緩存問題
1资溃、GET方式在IE會發(fā)生緩存問題,如果url相同烈炭,會自動使用緩存結(jié)果
2溶锭、以下四種方法,前三種屬于客戶端解決緩存問題符隙,第四種是服務(wù)器解決緩存問題趴捅。
解決方法一:?&=Math.random();
弊端—會產(chǎn)生大量緩存文件,有隨機值重復(fù)的可能
解決方法二:?=new Date().getTime();
注意—會產(chǎn)生大量緩存文件霹疫,但永遠(yuǎn)不可能重復(fù)拱绑,js里的時間戳是毫秒,
解決方法三: 設(shè)置請求頭 setRequestHeader(‘If-Modified-Since’,’0’);
每次發(fā)送ajax請求時丽蝎,設(shè)置請求頭猎拨,表示當(dāng)前被緩存的資源的最后修改時間為0,服務(wù)器會用這個‘0’與被請求資源的最后修改時間進(jìn)行比較屠阻,因為是不同的红省,所以會將最新的結(jié)果返回
只產(chǎn)生一個緩存文件。一直是最新的緩存文件
解決方法四: 設(shè)置響應(yīng)頭 header(‘Cache-Control:no-cache,must-revalidate’);(header放在輸出前)
在php服務(wù)器端禁用緩存的方式国觉,請求一次后吧恃,會自動在客戶端生成一個過期緩存文件,所有下次訪問時麻诀,這個緩存文件過期了痕寓,必須重新發(fā)送請求。
擴展知識
Return 表示將結(jié)果返回給PHP程序本身
Echo 輸出語句蝇闭,利用http響應(yīng)(利用http機制)將數(shù)據(jù)寫在響應(yīng)空白行的下面
六厂抽、JSON的使用(是在PHP中使用的)(ajax中數(shù)據(jù)信息交換只有JSON和XML兩種方式)
1、什么是JSON:在JSON中丁眼,對象是屬性的無序集合(對象由屬性構(gòu)成,這些屬性是無序的)
基于JavaScript語言的輕量級的數(shù)據(jù)交換格式(JavaScript Object Notiation)
2昭殉、語法:var obj={屬性名:值苞七,…}; obj則稱為JSON對象;
a) JSON對象的本質(zhì)其實是Object系統(tǒng)類的一個實例
b) 補充:屬性名的定義時挪丢,可以使用單引蹂风、雙引、或不用引乾蓬,三種格式惠啄;
3、JSON的使用
a) 使用JSON表示一個人的信息
i. 例:var obj = {name:’mark’,age:21};
b) JSON數(shù)組
i. var obj = [{‘name’:’lily’,’age’:21},{‘name’:’mark’,’age’:21},{‘name’:’ton’,’age’:21}]
每一個數(shù)組元素都是一個JSON對象
4、在PHP中使用JSON
a) 生成JSON:首先要有一個數(shù)組或?qū)ο蟆?br> i. json_encode($arr);把數(shù)組變成JSON對象
ii. 補充:JSON中的中文只能保存utf-8編碼格式
b) 解析JSON:首先有一個json字符串撵渡。
i. json_decode($json融柬,true);將JSON字符串解析成數(shù)組格式
ii. true表示解析到一個數(shù)組中;false表示將數(shù)據(jù)解析到一個對象中(默認(rèn))
六趋距、JSON的使用(是在PHP中使用的)(ajax中數(shù)據(jù)信息交換只有JSON和XML兩種方式)
1粒氧、什么是JSON:在JSON中,對象是屬性的無序集合(對象由屬性構(gòu)成节腐,這些屬性是無序的)
基于JavaScript語言的輕量級的數(shù)據(jù)交換格式(JavaScript Object Notiation)
2外盯、語法:var obj={屬性名:值,…}; obj則稱為JSON對象翼雀;
a) JSON對象的本質(zhì)其實是Object系統(tǒng)類的一個實例
b) 補充:屬性名的定義時饱苟,可以使用單引、雙引狼渊、或不用引箱熬,三種格式;
3囤锉、JSON的使用
a) 使用JSON表示一個人的信息
i. 例:var obj = {name:’mark’,age:21};
b) JSON數(shù)組
i. var obj = [{‘name’:’lily’,’age’:21},{‘name’:’mark’,’age’:21},{‘name’:’ton’,’age’:21}]
每一個數(shù)組元素都是一個JSON對象
4坦弟、在PHP中使用JSON
a) 生成JSON:首先要有一個數(shù)組或?qū)ο蟆?br>
i. json_encode($arr);把數(shù)組變成JSON對象
ii. 補充:JSON中的中文只能保存utf-8編碼格式
b) 解析JSON:首先有一個json字符串。
i. json_decode($json官地,true);將JSON字符串解析成數(shù)組格式
ii. true表示解析到一個數(shù)組中酿傍;false表示將數(shù)據(jù)解析到一個對象中(默認(rèn))
七、利用JSON傳遞數(shù)據(jù)
a) 在程序中驱入,php服務(wù)器向客戶端返回多個數(shù)據(jù)赤炒,可以使用JSON
b) 語法:var json = eval(‘(‘+xhr.responseText+’)’);將Ajax對象的返回值包裝成一個json對象