AJAX(Asynchronous Javascript And XML)其實(shí)就是異步的javaScript和XML。它是一組用于異步顯示數(shù)據(jù)的相關(guān)技術(shù)。換句話說,它在不重新加載網(wǎng)頁的情況下發(fā)送和檢索數(shù)據(jù)。
1.頁面局部刷新。在讀取數(shù)據(jù)的過程中,用戶所面對的不是白屏,而是原來頁面的轉(zhuǎn)臺,或者正在更新的信息提示狀態(tài),只有當(dāng)接收到全部數(shù)據(jù)后才能更新相應(yīng)的內(nèi)容,而這種更新也是瞬間的用戶幾乎感受不到。
2.可以充分利用客戶端閑置的處理能力,減輕服務(wù)器和網(wǎng)絡(luò)傳輸?shù)呢?fù)擔(dān)。
3.使得web中界面與應(yīng)用相分離 也可以說是數(shù)據(jù)與呈現(xiàn)相分離。
1.AJAX干掉了Back和History功能,即對瀏覽器機(jī)制的破壞。
2.AJAX安全問題
3.對搜索引擎支持較弱
4.不好調(diào)試
5.違背了URL和資源定位的初衷
6.AJAX不是很好支持移動設(shè)備
AJAX模塊在處理網(wǎng)絡(luò)請求的時(shí)候包括以下四個(gè)步驟
①通過XMLHttpRequest類創(chuàng)建xhr對象
②為xhr對象添加屬性與回調(diào)方法
③令xhr對象執(zhí)行open()方法,指明請求被發(fā)往某處
④令xhr對象執(zhí)行send()方法,發(fā)出請求。
補(bǔ)充:Ajax可以發(fā)出同步請求,也可以發(fā)出異步請求。但大多數(shù)情況下指的是異步請求,因?yàn)橥降腁jax請求對瀏覽器會產(chǎn)生‘阻塞效應(yīng)。
//創(chuàng)建 XMLHttpRequest 對象
var ajax = new XMLHttpRequest(); //規(guī)定請求的類型、URL 以及是否異步處理請求。
ajax.open('GET',url,true); //發(fā)送信息至服務(wù)器時(shí)內(nèi)容編碼類型
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //發(fā)送請求
ajax.send(null); //接受服務(wù)器響應(yīng)數(shù)據(jù)
ajax.onreadystatechange = function () {
if (obj.readyState == 4 && (obj.status == 200 || obj.status == 304)) {
//業(yè)務(wù)處理
}
};
常用的post,get,delete。不常用copy、head、link等等。
區(qū)別:
(1)post比get安全 (因?yàn)閜ost參數(shù)在請求體中。get參數(shù)在url上面)
(2)get傳輸速度比post快 根據(jù)傳參決定的。(post通過請求體傳參,后臺通過數(shù)據(jù)流接收。速度稍微慢一些。而get通過url傳參可以直接獲取)
(3)post傳輸文件大理論沒有限制 get傳輸文件小大概7-8k ie4k左右
(4)get獲取數(shù)據(jù) post上傳數(shù)據(jù)(上傳的數(shù)據(jù)比較多 而且上傳數(shù)據(jù)都是重要數(shù)據(jù)。所以不論在安全性還是數(shù)據(jù)量級 post是最好的選擇)。
同步請求會阻止用戶,直到檢索到響應(yīng),而異步不會阻止用戶。
回調(diào)函數(shù)將函數(shù)作為參數(shù)傳遞給另一個(gè)函數(shù)。如果我們必須在網(wǎng)站上執(zhí)行各種AJAX任務(wù),那么我們可以創(chuàng)建一個(gè)用于執(zhí)行XMLHttpRequest的函數(shù)和一個(gè)用于執(zhí)行每個(gè)AJAX任務(wù)的回調(diào)函數(shù)。
有幾種用于調(diào)試AJAX應(yīng)用程序的工具。
● 適用于Mozilla Firefox的Firebug
● 適用于IE的Fiddler(Internet Explorer)
● JavaScript HTML調(diào)試器
● MyEclipse AJAX工具
● 腳本調(diào)試器
在AJAX中有5個(gè)請求的就緒狀態(tài)。
● 0:意味著未被發(fā)現(xiàn)
● 1:表示已打開
● 2:表示HEADERS_RECEIVED
● 3:表示裝載
● 4:表示完成