2 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
JavaScript能流行,一個(gè)很重要的原因是AJAX技術(shù)的應(yīng)用。在網(wǎng)頁中有很多的應(yīng)用。舉兩個(gè)常見的AJAX應(yīng)用的例子:
1、 在搜索中,我們輸入關(guān)鍵字時(shí),網(wǎng)頁會(huì)實(shí)時(shí)展現(xiàn)搜索結(jié)果;這是用AJAX實(shí)現(xiàn)的。
2、 使用地圖時(shí),地圖會(huì)根據(jù)用戶顯示的位置不停的更新。這也是通過AJAX實(shí)現(xiàn)。
那么什么是AJAX呢?
AJAX全稱為Asynchronous JavaScript And XML直譯就是異步的JavaScript和XML(這里我們主要介紹下JavaScript中AJAX的應(yīng)用)
通常當(dāng)JavaScript向服務(wù)器發(fā)送請(qǐng)求獲取數(shù)據(jù)時(shí),服務(wù)器會(huì)返回?cái)?shù)據(jù)。在傳統(tǒng)沒有使用AJAX的網(wǎng)頁中,需要刷新頁面使其重新加載。而AJAX可以使網(wǎng)頁在不重新加載頁面的情況下對(duì)網(wǎng)頁的局部進(jìn)行更新。(比如,當(dāng)你要放大地圖的時(shí)候,你會(huì)不斷的向服務(wù)器請(qǐng)求地圖當(dāng)前位置的詳細(xì)信息,服務(wù)器返回?cái)?shù)據(jù)給你,這里我們并不需要重新加載整個(gè)頁面,不然用戶體驗(yàn)就太差了。而是局部更新頁面。)
由于我不可能在這寫一個(gè)地圖這樣復(fù)雜的例子,而為了演示AJAX的使用,我借用了秒秒學(xué)的一個(gè)簡單示例:
// 簡單的AJAX舉例。
// 1: 創(chuàng)建請(qǐng)求變量
var myRequest;
// 瀏覽器的特征檢查。
if (window.XMLHttpRequest) { //若支持,則是火狐、谷歌等瀏覽器。
myRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // 若不支持, 則是IE瀏覽器。
myRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
// 2: 為請(qǐng)求添加事件處理代碼。
myRequest.onreadystatechange = function(){
console.log("匿名函數(shù)被調(diào)用!");
console.log(myRequest.readyState);
if (myRequest.readyState === 4) {
var p = document.createElement("p");
var t = document.createTextNode(myRequest.responseText);
p.appendChild(t);
document.getElementById("mainContent").appendChild(p);
}
};
// 3: 配置發(fā)送請(qǐng)求
myRequest.open('GET', 'simple.txt', true);
myRequest.send(null);
//....
使用AJAX主要分三部分,如示例中的
1、 創(chuàng)建請(qǐng)求的變量。
在script文件中,首先聲明XMLHttpRequest對(duì)象,這也是題主說的Ajax的核心。瀏覽器頁面能通過XMLHttpRequest對(duì)象和服務(wù)器進(jìn)行通訊。因?yàn)檫@個(gè)對(duì)象的創(chuàng)建因?yàn)g覽器的不同而有區(qū)別。所以我們要用if語句判斷XMLHttpRequest是否存在。
2、 為請(qǐng)求添加事件處理代碼
創(chuàng)建好XMLHttpRequest對(duì)象后,就可以向服務(wù)器發(fā)送請(qǐng)求了,不過我們首先處理服務(wù)器響應(yīng)的事件。當(dāng)服務(wù)器響應(yīng)后會(huì)觸發(fā)myRequest對(duì)象的onreadystatechange事件。
在onreadystatechange事件中我們看到myRequest調(diào)用了readyState屬性,readyState有4個(gè)值表示目前響應(yīng)所在的階段,各數(shù)值表示如下:
l 1:請(qǐng)求已經(jīng)建立,但是還沒有發(fā)送(還沒有調(diào)用 send())。
l 2:請(qǐng)求已發(fā)送,正在處理中(通?,F(xiàn)在可以從響應(yīng)中獲取內(nèi)容頭)。
l 3:請(qǐng)求在處理中;通常響應(yīng)中已有部分?jǐn)?shù)據(jù)可用了,但是服務(wù)器還沒有完成響應(yīng)的生成。
l 4:響應(yīng)已完成;您可以獲取并使用服務(wù)器的響應(yīng)了。
我們一般只關(guān)心readyState的值為4的情況,表示響應(yīng)已完成。
3、 配置發(fā)送請(qǐng)求
使用open方法配置請(qǐng)求。它有三個(gè)參數(shù):
1、第一個(gè)參數(shù)表示用GET獲取服務(wù)器中的數(shù)據(jù)。
2、第二個(gè)參數(shù)是一個(gè)服務(wù)器地址,這里我們用本地的simple.txt代替,省去創(chuàng)建服務(wù)器的麻煩。
3、第三個(gè)參數(shù)true表示請(qǐng)求是異步的,即當(dāng)請(qǐng)求發(fā)送后,JavaScript不會(huì)為了等待服務(wù)器的響應(yīng)而阻塞,它會(huì)繼續(xù)執(zhí)行后續(xù)代碼。
配置好請(qǐng)求后,用send方法發(fā)送請(qǐng)求,這里給send傳遞的參數(shù)是null,若有其它參數(shù)需要發(fā)送,也可以傳遞給send方法。

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
AJAX全稱為Asynchronous JavaScript And XML直譯就是異步的JavaScript和XML。
通常當(dāng)JavaScript向服務(wù)器發(fā)送請(qǐng)求獲取數(shù)據(jù)時(shí),服務(wù)器會(huì)返回?cái)?shù)據(jù)。在傳統(tǒng)沒有使用AJAX的網(wǎng)頁中,需要刷新頁面使其重新加載。而AJAX可以使網(wǎng)頁在不重新加載頁面的情況下對(duì)網(wǎng)頁的局部進(jìn)行更新。
使用AJAX主要分三部分:
1、 創(chuàng)建請(qǐng)求的變量。
2、 為請(qǐng)求添加事件處理代碼。
3、 配置發(fā)送請(qǐng)求。
【AJAX舉例】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var myRequest; if (window.XMLHttpRequest) { myRequest = new XMLHttpRequest();} else if (window.ActiveXObject) { myRequest = new ActiveXObject("Microsoft.XMLHTTP"); } myRequest.onreadystatechange = function(){ console.log("匿名函數(shù)被調(diào)用!"); console.log(myRequest.readyState); if (myRequest.readyState === 4) { var p = document.createElement("p"); var t = document.createTextNode(myRequest.responseText); p.appendChild(t); document.getElementById("mainContent").appendChild(p);}}; myRequest.open('GET', 'simple.txt', true); myRequest.send(null); |
- 2 回答
- 0 關(guān)注
- 383 瀏覽
添加回答
舉報(bào)