//用戶名校驗的方法
//這個方法將使用XMLHTTPRequest對象來進行AJAX的異步數據交互
var xmlhttp;
function verify() {
//0。使用dom的方式獲取文本框中的值
//document.getElementById("userName")是dom中獲取元素節點的一種方法,一個元素節點對應HTML頁面中的一個標簽,如果<input>
//。value可以獲取一個元素節點的value屬性值
var userName = document.getElementById("userName").value;
//1.創建XMLHttpRequest對象
//這是XMLHttpReuquest對象無部使用中最復雜的一步
//需要針對IE和其他類型的瀏覽器建立這個對象的不同方式寫不同的代碼
if (window.XMLHttpRequest) {
//針對FireFox,Mozillar,Opera,Safari,IE7,IE8
xmlhttp = new XMLHttpRequest();
//針對某些特定版本的mozillar瀏覽器的BUG進行修正
if (xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType("text/xml");
}
} else if (window.ActiveXObject) {
//針對IE6,IE5.5,IE5
//兩個可以用于創建XMLHTTPRequest對象的控件名稱,保存在一個js的數組中
//排在前面的版本較新
var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
for (var i = 0; i < activexName.length; i++) {
try{
//取出一個控件名進行創建,如果創建成功就終止循環
//如果創建失敗,回拋出異常,然后可以繼續循環,繼續嘗試創建
xmlhttp = new ActiveXObject(activexName[i]);
break;
} catch(e){
}
}
}
//確認XMLHTtpRequest對象創建成功
if (!xmlhttp) {
alert("XMLHttpRequest對象創建失敗!!");
return;
} else {
alert(xmlhttp.readyState);
}
//2.注冊回調函數
//注冊回調函數時,之需要函數名,不要加括號
//我們需要將函數名注冊,如果加上括號,就會把函數的返回值注冊上,這是錯誤的
xmlhttp.onreadystatechange = callback;
//3。設置連接信息
//第一個參數表示http的請求方式,支持所有http的請求方式,主要使用get和post
//第二個參數表示請求的url地址,get方式請求的參數也在url中
//第三個參數表示采用異步還是同步方式交互,true表示異步
//xmlhttp.open("GET","AJAXServer?name="+ userName,true);
//POST方式請求的代碼
xmlhttp.open("POST","AJAXXMLServer",true);
//POST方式需要自己設置http的請求頭
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//POST方式發送數據
xmlhttp.send("name=" + userName);
//4.發送數據,開始和服務器端進行交互
//同步方式下,send這句話會在服務器段數據回來后才執行完
//異步方式下,send這句話會立即完成執行
//xmlhttp.send(null);
}
//回調函數
function callback() {
//alert(xmlhttp.readyState);
//5。接收響應數據
//判斷對象的狀態是交互完成
if (xmlhttp.readyState == 4) {
//判斷http的交互是否成功
if (xmlhttp.status == 200) {
//使用responseXML的方式來接收XML數據對象的DOM對象
var domObj = xmlhttp.responseXML;
if (domObj) {
//<message>123123123</message>
//dom中利用getElementsByTagName可以根據標簽名來獲取元素節點,返回的是一個數組
var messageNodes = domObj.getElementsByTagName("message");
if (messageNodes.length > 0) {
//獲取message節點中的文本內容
//message標簽中的文本在dom中是message標簽所對應的元素節點的字節點,firstChild可以獲取到當前節點的第一個子節點
//通過以下方式就可以獲取到文本內容所對應的節點
var textNode = messageNodes[0].firstChild;
//對于文本節點來說,可以通過nodeValue的方式返回文本節點的文本內容
var responseMessage = textNode.nodeValue;
//將數據顯示在頁面上
//通過dom的方式找到div標簽所對應的元素節點
var divNode = document.getElementById("result");
//設置元素節點中的html內容
divNode.innerHTML = responseMessage;
} else {
alert("XML數據格式錯誤,原始文本內容為:" + xmlhttp.responseText);
}
} else {
alert("XML數據格式錯誤,原始文本內容為:" + xmlhttp.responseText);
}
} else {
alert("出錯了!!!");
}
}
}
public class AJAXServer extends HttpServlet {
protected void doPost(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {
doGet(httpServletRequest, httpServletResponse);
}
protected void doGet(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {
try {
// request.setCharacterEncoding("UTF-8");
// response.setContentType("text/html;charset=gb18030");
httpServletResponse.setContentType("text/html;charset=utf-8");
PrintWriter out = httpServletResponse.getWriter();
Integer inte = (Integer) httpServletRequest.getSession()
.getAttribute("total");
int temp = 0;
if (inte == null) {
temp = 1;
} else {
temp = inte.intValue() + 1;
}
httpServletRequest.getSession().setAttribute("total", temp);
// 1.取參數
String old = httpServletRequest.getParameter("name");
// String name = new String(old.getBytes("iso8859-1"),"UTF-8");
String name = URLDecoder.decode(old, "UTF-8");
// 2.檢查參數是否有問題
if (old == null || old.length() == 0) {
out.println("用戶名不能為空");
} else {
// String name = URLDecoder.decode(old,"UTF-8");
// byte[] by = old.getBytes("ISO8859-1");
// String name = new String(by,"utf-8");
// String name = URLDecoder.decode(old,"utf-8");
// 3.校驗操作
//String name = old;
if (name.equals("ashutc")) {
// 4。和傳統應用不同之處。這一步需要將用戶感興趣的數據返回給頁面段,而不是將一個新的頁面發送給用戶
// 寫法沒有變化,本質發生了改變
out.println("用戶名[" + name + "]已經存在,請使用其他用戶名, " + temp);
} else {
out.println("用戶名[" + name + "]尚未存在,可以使用該用戶名注冊, " + temp);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}