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