ajax技術的實現流程:
1.xmlHttp = new XMLHttpRequest(); //創建XMLHttpRequest對象。
2.xmlHttp.open("GET",url,true); //註冊處理事件的url
3.xmlHttp.onreadystatechange = callback; //註冊回傳函數
4.xmlHttp.send(null); //發送請求
5.function callback(){ //在回調方法中進行請求狀態碼判斷。
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
showResult();//回傳處理 //請求迴應順利,就執行回傳處理。
}
}
}
6.function showResult() { //讀取請求得到的信息。進行分支處理。
var message = xmlHttp.responseXML.getElementsByTagName("message")[0];
var msg = message.firstChild.data;
if(msg=="0"){
nameEnable = true;
checkUserNameMsg.innerHTML = "<font color='green'><b>用戶名可以使用</b></font>";
return true;
}else if(msg=="1"){
nameEnable = false;
checkUserNameMsg.innerHTML = "<font color='red'><B> 用戶名已存在,請重新輸入</B></font>";
return false;
}
}//end function
以下是一個完整的例子:
jsp頁面。在用戶名字段失去焦點時,進行ajax驗證用戶名
本實例使用的是Mysql 數據庫。user_info數據表。
字段:
id int自增長,主鍵
user_name varchar(20) null
user_pwd varchar(16) null
使用Hibernate框架反向數據表爲實體Bean
reg.jsp
<textarea cols="68" rows="15" name="code" class="java:firstline[1]"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'reg.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> --> <mce:script type="text/javascript"><!-- var xmlHttp; //創建ajax請求對象 function createXml(){ if(window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); }else if(window.ActiveXObject){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } //驗證用戶名方法 function checkUserNameAction(){ var nameField = document.regForm.userName.value; if(nameField.length==0) return false; var url ="check?name=" + escape(nameField).replace(//+/g,"%2B").replace(/%/g,"%25"); checkUserNameMsg.innerHTML = "檢測中,請等待..."; createXml(); if(xmlHttp){ xmlHttp.open("GET",url,true); //註冊處理事件的url xmlHttp.onreadystatechange = callback; //註冊回傳函數 xmlHttp.send(null); //發送請求 } }//end checkUserNameAction(); //回傳方法 function callback(){ if(xmlHttp.readyState == 4){ if(xmlHttp.status == 200){ showResult();//回傳處理 } } } //顯示檢測結果 function showResult() { var message = xmlHttp.responseXML.getElementsByTagName("message")[0]; var msg = message.firstChild.data; if(msg=="0"){ nameEnable = true; checkUserNameMsg.innerHTML = "<font color='green'><b>用戶名可以使用</b></font>"; return true; }else if(msg=="1"){ nameEnable = false; checkUserNameMsg.innerHTML = "<font color='red'><B>&nbsp;用戶名已存在,請重新輸入</B></font>"; return false; } }//end function //密碼框失焦時,顯示驗證結果 function upm(){ var len = document.regForm.password.value.length; var pm = document.getElementById("pass"); if(eval(len)<4||(len)>16){ pm.innerHTML = "<font color=red>&nbsp;<b>密碼長度不對</b></font>"; }else{ pm.innerHTML = "<font color=green>&nbsp;<b>密碼格式正確</b></font>"; } } //密碼框得到焦點時顯示的提示信息 function gpm(){ var pm = document.getElementById("pass"); pm.innerHTML = "&nbsp;<b>設置您的登陸密碼4-16位</b>"; document.regForm.password.select(); } // --></mce:script> </head> <body> <form name="regForm" action="" method="post"> <table> <tr> <td height="30" align="right" bgcolor="FFF3D3" class="font_black"> 用 戶 名: </td> <td width="490" align="left" valign="middle" bgcolor="#F8F8F8"> <input type="text" name="userName" tabindex="2" onblur="checkUserNameAction()" size="18" maxlength="20" /> <font color=red>*</font> <span id="checkUserNameMsg"> <font color='blue'><B>您的用戶名必須是唯一的</B></font> </span> </td> </tr> <tr> <td height="30" align="right" bgcolor="FFF3D3" class="font_black"> 密 碼: </td> <td align="left" bgcolor="F8F8F8"> <input type="password" tabindex=3 onfocus = "gpm()" onblur="upm()" name="password" size="20" maxlength="16"/> <span style="color:red" mce_style="color:red">*</span><span id = "pass" style="color:blue" mce_style="color:blue"><b> 設置您的登陸密碼4-16位</b></span> </td> </tr> </table> </form> </body> </html> </textarea>
Servlet文件Check.java
URL解碼類EscapeUnescape.java