//使用XMLHttpRequest對象來進行AJAX的異步數據交互,5個步驟如下:
var xmlHttp;
function verify() {
//0.使用dom的方式獲取文本框中的值。例如:document.getElementById("標籤對應的Id的名稱").value。
var userName = document.getElementById("userName").value;
//1.創建XMLHttpRequest對象,方法體外部定義為全局變量,見代碼第一行
// 不同瀏覽器建立這個對象代碼書寫有差異
if (window.XMLHttpRequest) {
// 針對FireFox,Mozilla,Opera,Safari,IE7,IE8
xmlHttp = new XMLHttpRequest();
// 下面二行代碼是針對Mozilla瀏覽器某特定版本的BUG進行修正
if (xmlHttp.overrideMimeType) {
xmlHttp.overrideMimeType("text/xml");
}
} else if (window.ActiveXObject) {
// 針對IE6,IE5.5,IE5
// 下面的數組保存的是可以創建XMLHttpRequest對象的控件名稱
// MSXML2.xmlHttp 比 Microsoft.xmlHttp 的版本要新
var activexName = ["MSXML2.xmlHttp","Microsoft.xmlHttp"];
for (var i = 0; i < activexName.length(); i++) {
try {
xmlHttp = new ActiveXObject(activexName[i]);
break;
} catch (e) {
e.Exception();
}
}
}
//創建XMLHttpRequest對象是否成功,給出提示。
// if (!xmlHttp) {
// alert("XMLHttpRequest對象創建失敗!");
// return;
// } else {
// alert("XMLHttpRequest對象創建成功!");
// alert("readyState="+xmlHttp.readyState);
// }
//2.註冊回調函數
// 註冊回調函數時只需要函數名,不要加括號
// 如果加上括號,就會把函數返回的值註冊上,這是不對的。
xmlHttp.onreadystatechange = callback;
//3.設置連接信息,open(String method,String url,boolean asynch,[String username],[String password])
// 第一個參數表示http的請求方式,支持http所有的請求方式,主要使用get和post
// 第二個參數表示請求的url地址,get方式請求的參數也在url中
// 第三個參數表示交互方式,true表示異步, false表示同步
// 第四和第五個參數表示http認證機制需要的用戶名和密碼,不認證則不需要
//3.1 http的請求方式為get
// var urlGet = "AJAXservlet?userName=" + userName;
// xmlHttp.open("GET",urlGet,true)
//3.2 http的請求方式為post
var urlPost = "AJAXXMLservlet";
xmlHttp.open("POST",urlPost,true);
// post方式要設置請求頭文件
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//4.發送數據,開始和服務器交互數據,send(par)
// 同步方式下,send這句代碼會在服務器數據交互回來之後才執行
// 異步方式下,send這句代碼會馬上執行
//4.1 http的請求方式為get
// xmlHttp.send(null);
//4.2 http的請求方式為post
xmlHttp.send("userName=" + userName);
}
// 回調函數方法體
function callback() {
// alert("readyState="+xmlHttp.readyState);
//5.接收響應數據
// 判斷對象的狀態是否交互完成
// readyState: 0=未初始化;1=open方法成功調用以後;2=服務器已經響應了客戶端的請求;
// 3=交互中,http頭信息已經接收,但應答數據還未接收;4=完成,應答數據接收完成
if(xmlHttp.readyState == 4) {
// 判斷http的交互是否成功
if(xmlHttp.status == 200) {
// 獲取服務器返回的數據
// 兩種方式獲取,一種是純文本形式responseText,一種是XML形式responseXML
// 下面的是純文本形式
var responseText = xmlHttp.responseText;
var divNode = document.getElementById("result");
divNode.innerHTML = responseText;
// // 下面的是XML形式
// var xml = xmlHttp.responseXML;
// if (xml) {
// var responseMassage = massageNodes[0].firstChild.nodeValue;
// var massageNodes = xml.getElementsByTagName("massage");
// if (massageNodes.length > 0) {
// var divNode = document.getElementById("result");
// divNode.innerHTML = responseMassage;
// } else {
// alert("XML數據格式錯誤,原始文本內容為:" + xmlHttp.responseText);
// }
// } else {
// alert("XML數據格式錯誤,原始文本內容為:" + xmlHttp.responseText);
}
}
}
}