1.什麼是Ajax:
AJAX是“Asynchronous JavaScript and XML”的縮寫。他是指一種創建交互式網頁應用的網頁開發技術。
Ajax包含下列技術:
-
基於web標準(standards-based presentation)XHTML+CSS的表示;
-
使用 DOM(Document Object Model)進行動態顯示及交互;
-
使用 XML 和 XSLT 進行數據交換及相關操作;
-
使用 XMLHttpRequest 進行異步數據查詢、檢索;
-
使用 JavaScript 將所有的東西綁定在一起
2.Ajax應用程序的優勢:
-
1. 通過異步模式,提升了用戶體驗
-
2. 優化了瀏覽器和服務器之間的傳輸,減少不必要的數據往返,減少了帶寬佔用
-
3. Ajax引擎在客戶端運行,承擔了一部分本來由服務器承擔的工作,從而減少了大用戶量下的服務器負載
3.Ajax最大的特點:
Ajax可以實現動態不刷新(局部刷新)
4.XMLHttpRequest對象的常用方法和屬性:
open(“method”,”URL”) 建立對服務器的調用,第一個參數是HTTP請求 方式可以爲GET,POST或任何服務器所支持的您想調用的方式。
第二個參數是請求頁面的URL地址
status 服務器的HTTP狀態碼,200 ---> ok 400 ---> not found
-
send()方法:發送具體請求
-
abort()方法:停止當前請求
-
readyState:存有服務器響應的狀態信息。
- 0: 請求未初始化(代理被創建,但尚未調用 open() 方法)
- 1: 服務器連接已建立(
open
方法已經被調用) - 2: 請求已接收(
send
方法已經被調用,並且頭部和狀態已經可獲得) - 3: 請求處理中(下載中,
responseText
屬性已經包含部分數據) - 4: 請求已完成,且響應已就緒(下載操作已完成)
-
responseText 屬性 : 服務器的響應,獲得字符串形式的響應數據(數據體內容)
-
reponseXML 屬性 :服務器的響應,表示爲XML
5.Ajax的優點和缺點:
優點:
-
1、最大的一點是頁面無刷新,用戶的體驗非常好。
-
2、使用異步方式與服務器通信,具有更加迅速的響應能力。
-
3、可以把以前一些服務器負擔的工作轉嫁到客戶端,利用客戶端閒置的能力來處理,減輕服務器和帶寬的負擔,節約空間和寬帶租用成本。並且減輕服務器的負擔,ajax的原則是“按需取數據”,可以最大程度的減少冗餘請求,和響應對服務器造成的負擔。
-
4、基於標準化的並被廣泛支持的技術,不需要下載插件或者小程序
缺點:
-
1、ajax不支持瀏覽器back按鈕。
-
2、安全問題 AJAX暴露了與服務器交互的細節。
-
3、對搜索引擎的支持比較弱。
-
4、破壞了程序的異常機制。
-
5、不容易調試
6. Jquery 實現 Ajax 的主要步驟:
$.ajax({
url: 'URL地址,默認是當前頁面',
type: '規定請求的類型(GET 或 POST)',
dataType: '預期的服務器響應的數據類型',
async : '布爾值,表示請求是否異步處理。默認是 true'
data: {
規定要發送到服務器的數據
},
success: function(){
當請求成功時運行的函數
},
error: function(){
當請求失敗時運行的函數
}
})
7. 原生js 實現Ajax的主要步驟:
//先處理兼容性問題
var xhr = null;
if(window.MLHttpRequest){
xhr = new XMLHttpRequest(); //其他瀏覽器
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP") //老版本的IE瀏覽器
}
xhr.onreadystatechange = function() {
// readyState == 4說明請求已完成
if (xhr.readyState == 4 && xhr.status == 200{
// 從服務器獲得數據
console.log(xhr.responseText);
}
};
xhr.open('GET/POST', url地址, true); //GET發送信息時直接加參數到url即可,比如url?a= & b=b1
xhr.send();
},
// 請求格式爲POST時,必須要寫http頭,發送信息至服務器時內容編碼類型
// xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
8.原生js實現對ajax的封裝:
//封裝ajax,這裏以GET請求爲例
function ajax(url,fnSucc,fnErr){ //ajax中傳遞3個參數(請求地址,請求成功的回調函數,請求失敗的回調函數)
//處理兼容性
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP")
}
//onload爲完成時
xhr.onload = function(){
if(xhr.readyState === 4 && xhr.status === 200){
fnSucc(xhr.responseText)
}else{
fnErr(xhr.status)
}
}
//或者還可以這樣寫
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status === 200){
fnSucc(xhr.responseText)
}else{
fnErr(xhr.status)
}
}
}
xhr.open("GET",url,true)
xhr.send()
}
//調用ajax函數
ajax(url地址,function(str){
console.log("請求成功")
},function(){
console.log("請求失敗")
})