對ajax理解及原生封裝
阿新 • • 發佈:2019-02-01
onreadystatechange 事件
當請求被髮送到伺服器時,我們需要執行一些基於響應的任務。
每當 readyState 改變時,就會觸發 onreadystatechange 事件。
readyState 屬性存有 XMLHttpRequest 的狀態資訊。
下面是 XMLHttpRequest 物件的三個重要的屬性:
屬性 | 描述 |
---|---|
onreadystatechange | 儲存函式(或函式名),每當 readyState 屬性改變時,就會呼叫該函式。 |
readyState |
存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。
|
status |
200: "OK" 404: 未找到頁面 |
在 onreadystatechange 事件中,我們規定當伺服器響應已做好被處理的準備時所執行的任務。
當 readyState 等於 4 且狀態為 200 時,表示響應已就緒:
//封裝Ajax
function(method, url, success, fail, data) {//第一個引數:method用來表示請求的傳送方式GET/POST
//最後一個引數是一個物件,裡面儲存了要提交的資料
var ajax = window.XMTLHttpRequest ? window.XMLHttpRequest() : window.ActiveXObject('Microsoft.XMLHTTP');
var str = '';
if (data instanceof Object) {
//判斷data是不是一個物件
for(var k in data){
str = str + k + '=' + data.k + '&';
}
//去掉最後一個&符號
str = str.substring(0,str.length - 1);
//至此data中的資料已經轉換成指定格式的字串
}
//處理method的字串
method = method.toUpperCase();
if(method == 'GET'){
url = url + '?' + str;
}
ajax.onreadystatechange = function(){
if (ajax.readyState == 4) {
if (ajax.status == 200) {
if (success instanceof Function) {
success(ajax.responseXML || responseText);
}
}else{
if (fail instanceof Function) {
fail(ajax.status);
}
}
}
}
ajax.open(method, url, true);
if (method == 'GET') {
//如果是get方式,則send方法中的引數為null
ajax.send(null);
}else if(method == 'POST'){
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //POST中,這句必須
ajax.send(str);
}
}