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));