Ajax 是Asynchronous Javascript and XML的簡寫,對它最多的人是無非是局部刷新技術,它可以在不刷新頁面的情況下向後台發送或者請求數據。它的核心是XMLHttpRequest對象(簡稱XHR),在IE7+、Firfox、Opera、Chrome、Safari都支持原生的XHR對象即顯式使用var xhr = new XMLHttpRequest()就可以直接創建此對象。如果要支持IE7以下版本的,則需要使用ActiveX對象來實現。隨著WindowXP的退休,相信用到IE7以下版本的幾乎沒有了,但還是提供以前的兼容實現方式:
function createXHR () {
if (typeof XMLHttpRequest != "undefined") {
return new XMLHttpRequest();
} else if (typeof ActiveXObject != "undefined") {
var version =["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp.2.0"],
i,
len;
for (i = 0.len = version.length; i < len; i++) {
try{
new ActiveXObject(version[i]);
arguments.callee.activeXString = version[i];
break;
} catch (ex){
//dosomething();
}
};
return new ActiveXObject(arguments.callee.activeXString);
} else {
throw new Error("No XHR object available!");
};
}下面是你所看見AJAX最原生的js實現方式,現在jquery等框架已經完全封裝,下面講解每個步驟的作用以及使用。var xhr = new createXHR();
xhr.onreadyStatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status >= 200 && xhr.status < 300) { //http狀態為成功
alert(xhr.responseText);
} else {
alert("請求沒有成功!狀態說明:" + xhr.statusText);
}
};
}
xhr.open("get", "example.jsp", true);//啟動一個請求以備發送
xhr.send(null); //當請求類型為GET時,參數為null;為POST時,傳送的是作為請求主體的數據。responseText:作為響應主體返回的文本。var xhr = new createXHR();
xhr.open("get", "example.jsp", false); //第三個參數為false,為同步方式
xhr.send(null);
if (xhr.status >= 200 && xhr.status < 300) { //http狀態為成功
alert(xhr.responseText);//處理數據
} else {
alert("請求沒有成功!狀態說明:" + xhr.statusText);
}很容易看到,只有到xhr在浏覽器得到服務器方面返回的數據之後才會往下執行;在xhr.open()之後,send()之前可以設置請求的頭部信息關於頭部信息,請參考HTTP協議,
例如下面將用戶信息表單序列化之後發送到服務器,告訴服務器我發送的內容是表單形式。
xhr.open("post", "example.jsp", true);
setRequestHead("Content-Type", "application/x-www-form-urlencoded");
var form = document.getElementById("user-info");
xhr.send(serialize(form));