原生js實(shí)現(xiàn)Ajax方法:
var Ajax={
get: function(url, fn) { var xhr = new XMLHttpRequest(); // XMLHttpRequest對(duì)象用于在后臺(tái)與服務(wù)器交換數(shù)據(jù)
xhr.open('GET', url, true);
xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) { // readyState == 4說明請(qǐng)求已完成
fn.call(this, xhr.responseText); //從服務(wù)器獲得數(shù)據(jù)
}
};
xhr.send();
},
post: function (url, data, fn) { // datat應(yīng)為'a=a1&b=b1'這種字符串格式汹来,在jq里如果data為對(duì)象會(huì)自動(dòng)將對(duì)象轉(zhuǎn)成這種字符串格式
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // 添加http頭房交,發(fā)送信息至服務(wù)器時(shí)內(nèi)容編碼類型
xhr.onreadystatechange = function() { if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) { // 304未修改
fn.call(this, xhr.responseText);
}
};
xhr.send(data);
}
}
注釋:
- open(method, url, async) 方法需要三個(gè)參數(shù):
method:發(fā)送請(qǐng)求所使用的方法(GET或POST)赏半;與POST相比,GET更簡單也更快,并且在大部分情況下都能用右蹦;然而昨悼,在以下情況中,請(qǐng)使用POST請(qǐng)求:
- 無法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫)
- 向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒有數(shù)據(jù)量限制)
- 發(fā)送包含未知字符的用戶輸入時(shí),POST 比 GET 更穩(wěn)定也更可靠
url:規(guī)定服務(wù)器端腳本的 URL(該文件可以是任何類型的文件轨蛤,比如 .txt 和 .xml蜜宪,或者服務(wù)器腳本文件,比如 .asp 和 .php (在傳回響應(yīng)之前祥山,能夠在服務(wù)器上執(zhí)行任務(wù)))圃验;
async:規(guī)定應(yīng)當(dāng)對(duì)請(qǐng)求進(jìn)行異步(true)或同步(false)處理;true是在等待服務(wù)器響應(yīng)時(shí)執(zhí)行其他腳本缝呕,當(dāng)響應(yīng)就緒后對(duì)響應(yīng)進(jìn)行處理澳窑;false是等待服務(wù)器響應(yīng)再執(zhí)行。
send() 方法可將請(qǐng)求送往服務(wù)器供常。
onreadystatechange:存有處理服務(wù)器響應(yīng)的函數(shù)摊聋,每當(dāng) readyState 改變時(shí),onreadystatechange 函數(shù)就會(huì)被執(zhí)行栈暇。
readyState:存有服務(wù)器響應(yīng)的狀態(tài)信息麻裁。
- 0: 請(qǐng)求未初始化(代理被創(chuàng)建,但尚未調(diào)用 open() 方法)
- 1: 服務(wù)器連接已建立(
open
方法已經(jīng)被調(diào)用) - 2: 請(qǐng)求已接收(
send
方法已經(jīng)被調(diào)用源祈,并且頭部和狀態(tài)已經(jīng)可獲得) - 3: 請(qǐng)求處理中(下載中煎源,
responseText
屬性已經(jīng)包含部分?jǐn)?shù)據(jù)) - 4: 請(qǐng)求已完成,且響應(yīng)已就緒(下載操作已完成)
- responseText:獲得字符串形式的響應(yīng)數(shù)據(jù)香缺。
- setRequestHeader():POST傳數(shù)據(jù)時(shí)手销,用來添加 HTTP 頭,然后send(data)图张,注意data格式锋拖;GET發(fā)送信息時(shí)直接加參數(shù)到url上就可以。