功能實現的思路:當通常一個網站需要注冊用戶信息的時候,往往會讓用戶起一個名字,但一般要求這個用戶名稱是不能重復的,為了判斷新注冊的用戶填寫的用戶名是否已經存在,需要對填寫的用戶名稱進行判斷,實際項目開發時候注冊成功的用戶信息會存入數據庫中,真正的判斷是需要和數據庫數據進行對比來決定用戶名是否已經存在,但我這里僅僅是模擬這個功能,所以在后台對用戶輸入的用戶名的處理比較簡單,直接讓他和一個字符串進行對比(手動滑稽),和字符串一樣的話就提示用戶這個用戶名已經存在,不存在也會友善提醒用戶這個名字可以使用。
1、設計用戶注冊界面:
1 <table> 2 <tr> 3 <th>用戶注冊</th> 4 </tr> 5 <tr> 6 <td>用戶名:</th> 7 <td> 8 <input type="text" id="userName" name="userName" onblur="checkUserName()"/> 9 <font id="img"></font> 10 </td> 11 </tr> 12 <tr> 13 <td>密碼:</th> 14 <td><input type="password" id="password1" name="password1"/></td> 15 </tr> 16 <tr> 17 <td>確認密碼:</th> 18 <td><input type="password" id="password2" name="password2"/></td> 19 </tr> 20 <tr> 21 <td><input type="submit" id="sb" value="注冊"/></td> 22 <td><input type="button" id="button" value="重置密碼" onclick="czmima()"/></td> 23 </tr> 24 </table>
2、利用Ajax技術實現請求向后台服務器的訪問以及對返回結果的處理功能:
1 <script type="text/javascript"> 2 //簡單的實現用戶名和密碼重置的功能 3 function czmima(){ 4 document.getElementById("password1").value=""; 5 document.getElementById("password2").value=""; 6 document.getElementById("userName").value=""; 7 } 8 function checkUserName() { 9 var userName = document.getElementById("userName").value; 10 //創建XMLHttpRequest對象 11 var xmlHttp = null; 12 if(window.XMLHttpRequest){ 13 xmlHttp=new XMLHttpRequest(); 14 }else{ 15 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 16 } 17 //XMLHttpRequest對象請求后台服務 18 xmlHttp.onreadystatechange=function(){ 19 if(xmlHttp.readyState==4&&xmlHttp.status==200){ 20 var dataObject = eval("("+xmlHttp.responseText+")"); 21 if(dataObject.exist){ 22 //如果用戶名存在,就會在文本框的后邊顯示一個X的圖標,表示這個用戶名稱不可用 23 document.getElementById("img").innerHTML="<img src='no.png'/> 該用戶名稱已經存在!"; 24 }else{ 25 //如果用戶名存在,就會在文本框的后邊顯示一個“對號”的圖標,表示這個用戶名稱可用 26 document.getElementById("img").innerHTML="<img src='ok.png'/> 該用戶名稱可以使用!"; 27 } 28 } 29 } 30 //規定請求類型、請求處理的地址以及是否使用異步請求處理。 31 //這里還需要把用戶輸入的用戶名作為參數傳給后台servlet用以判斷 32 xmlHttp.open("get","checkUserNameServlet?userName="+userName,true); 33 //將請求發送給服務器進行處理 34 xmlHttp.send(); 35 } 36 </script>
3、編寫后台用於處理前端頁面傳入的userName參數的Servlet:
1 package com.java1234.web; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 import net.sf.json.JSONObject; 12 13 public class CheckUserNameServlet extends HttpServlet { 14 15 /** 16 * 17 */ 18 private static final long serialVersionUID = 1L; 19 20 @Override 21 protected void doGet(HttpServletRequest request, HttpServletResponse response) 22 throws ServletException, IOException { 23 this.doPost(request, response); 24 } 25 26 @Override 27 protected void doPost(HttpServletRequest request, HttpServletResponse response) 28 throws ServletException, IOException { 29 //設置瀏覽器接收到請求是需要知道的處理格式(MIME) 30 response.setContentType("text/html;charset=utf-8"); 31 PrintWriter out = response.getWriter(); 32 //創建一個JSONObject對象,用於封裝處理結果 33 JSONObject reslutJSon = new JSONObject(); 34 //接收從前端傳來的userName的參數 35 String userName = request.getParameter("userName"); 36 //這里就是直接讓前端傳入的參數和一個字符串進行比較 37 if("Marry".equals(userName)) { 38 reslutJSon.put("exist", true); 39 }else { 40 reslutJSon.put("exist", false); 41 } 42 out.println(reslutJSon); 43 out.flush(); 44 out.close(); 45 } 46 47 }
4、配置web.xlml文件,然后就能運行出結果了,這個需要注意的是,這個因為使用了JSON對象,所以程序運行要保證包含JSON的jar包。
總結:實話講這是一個簡單到極致的功能實現,但對於一個初學者的我來說,我需要從最基礎的知識點抓起,通過一個簡單的實例我能搞清楚Ajax動態實現局部數據更新的大致過程,不貪多不貪復雜,一步一步來穩穩的走路其實速度並不慢!