使用Ajax和JSON实现注册时候验证用户名是否存在的功能
功能实现的思路:当通常一个网站需要注册用户信息的时候,往往会让用户起一个名字,但一般要求这个用户名称是不能重复的,为了判断新注册的用户填写的用户名是否已经存在,需要对填写的用户名称进行判断,实际项目开发时候注册成功的用户信息会存入数据库中,真正的判断是需要和数据库数据进行对比来决定用户名是否已经存在,但我这里仅仅是模拟这个功能,所以在后台对用户输入的用户名的处理比较简单,直接让他和一个字符串进行对比(手动滑稽),和字符串一样的话就提示用户这个用户名已经存在,不存在也会友善提醒用户这个名字可以使用。
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动态实现局部数据更新的大致过程,不贪多不贪复杂,一步一步来稳稳的走路其实速度并不慢!