ajax实例2

来源:互联网 发布:vscode 自动补全 编辑:程序博客网 时间:2024/05/16 15:53

二、 用户名校验服务器返回XML数据的Ajax实例

1.register.html。

Html代码

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   
  2.         "http://www.w3.org/TR/html4/loose.dtd">  
  3. <html>  
  4. <head>  
  5.   <title>用户名校验ajax-xml实例</title>  
  6.  <meta http-equiv="content-type" content="text/html; charset=utf-8" />  
  7.  <script type="text/javascript" src="register.js"></script>  
  8.      
  9. </head>  
  10. <body>  
  11.   
  12.     用户名: <br/>  
  13.     <!--ajax方式下不需要使用表单来进行数据提交,因此不用写表单标签-->  
  14.     <!--ajax方式不需要name属性,需要一个id的属性-->  
  15.     <input type="text" id="userName" onkeypress="checkUsername(event)"/>  
  16.     <input type="button" value="定位文本框,按Enter校验"/>  
  17.        
  18.     <span id="result"></span>  
  19.   
  20. </body>  
  21. </html>  

2.JS代码(register.js)

Js代码

  1.        
  2. //创建AJAX引擎   
  3. var xmlhttp;   
  4. function createXmlhttp () {   
  5.     if (window.XMLHttpRequest) {   
  6.         //针对FireFox,Mozillar,Opera,Safari,IE7,IE8   
  7.         xmlhttp = new XMLHttpRequest();   
  8.         //针对某些特定版本的mozillar浏览器的BUG进行修正   
  9.         if (xmlhttp.overrideMimeType) {   
  10.             xmlhttp.overrideMimeType("text/xml");   
  11.         }   
  12.     } else if (window.ActiveXObject) {   
  13.          //针对IE6,IE5.5,IE5   
  14.         //两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js的数组中   
  15.         //排在前面的版本较新   
  16.         var activexName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];   
  17.         for (var i = 0; i < activexName.length; i++) {   
  18.             try{   
  19.                 //取出一个控件名进行创建,如果创建成功就终止循环   
  20.                 //如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建   
  21.                 xmlhttp = new ActiveXObject(activexName[i]);   
  22.                 break;   
  23.             } catch(e){   
  24.             }   
  25.         }   
  26.     }   
  27. }   
  28. //向servlet发送请求内容   
  29. function sendRequest ( url, content ) {   
  30.     createXmlhttp ();          
  31.     xmlhttp.onreadystatechange = processResponse;  //回调方法,注意没有()   
  32.     xmlhttp.open( "post",url,true );   
  33.     xmlhttp.setRequestHeader("content-type","application/x-www-form-urlencoded");   
  34.     xmlhttp.send(content);   
  35. }   
  36. //处理返回XML   
  37. function processResponse() {   
  38.     if ( xmlhttp.readyState == 4 ) {   
  39.         if ( xmlhttp.status == 200 ||  xmlhttp.status==0) {   
  40.             //调用xml的解析方法   
  41.             parserXML();   
  42.         }   
  43.     }   
  44. }   
  45. //解析xml   
  46. function parserXML() {   
  47.     var xmldoc  = xmlhttp.responseXML.documentElement;   
  48.     //xml内容:<root><message>true</message></root>,在有的情况下<message>有多个   
  49.     //dom中利用getElementsByTagName可以根据标签名来获取元素节点,返回的是一个数组   
  50.     var message_nodes = xmldoc.getElementsByTagName( "message" );   
  51.     //获取message节点中的文本内容   
  52.     //message标签中的文本在dom中是message标签所对应的元素节点的字节点,firstChild可以获取到当前节点的第一个子节点   
  53.     //通过以下方式就可以获取到文本内容所对应的节点   
  54.     var textNode = message_nodes[0].firstChild;   
  55.     //对于文本节点来说,可以通过nodeValue/data的方式返回文本节点的文本内容   
  56.     var hasUser_txt = textNode.data;   
  57.     var respname_obj = window.document.getElementById("result");   
  58.     var font_obj=window.document.createElement("font");   //创建字体dom元素   
  59.     var result_obj;   
  60.        
  61.     respname_obj.value="";   
  62.     if ( hasUser_txt=="false" ) {   
  63.         //创建文本节点   
  64.         result_obj=window.document.createTextNode("恭喜您!该用户名未被注册!");   
  65.         font_obj.appendChild(result_obj);
  66.         font_obj.setAttribute("color","green");   //设置字体属性   
  67.     }else {   
  68.         result_obj=window.document.createTextNode("对不起! 该用户名已被注册过了!");   
  69.         font_obj.appendChild(result_obj);
  70.         font_obj.setAttribute("color","red");   //设置字体属性   
  71.     }   
  72.                    
  73.     respname_obj.appendChild(font_obj);   
  74. }   
  75.   
  76. //用来清空提示错误留下来的信息   
  77. function clearErrorResp(response_obj ) {   
  78.     //取得父对象的子节点的个数   
  79.     var size = response_obj.childNodes.length;   
  80.     //从后往前,删除每个子节点   
  81.     for( var i=size-1; i>=0; --i){   
  82.         response_obj.removeChild(response_obj.childNodes[i]);   
  83.     }   
  84. }   
  85.   
  86. //检查用户名信息   
  87. function checkUsername(evt) {   
  88.     var userName_obj = window.document.getElementById("userName");   
  89.     var userName = userName_obj.value;   
  90.     var response_obj = window.document.getElementById("result");   
  91.        
  92.     //是否按ENTER键   
  93.     if ( evt.keyCode==13 ) {   
  94.         //判断用户名是否为空   
  95.         if ( userName.length > 0) {   
  96.             //用来清空上一次提示错误留下来的信息   
  97.             response_obj.innerHTML="";   
  98.             //clearErrorResp(response_obj);   
  99.             var url = "xmlCheckUsername";      
  100.             var content = "userName=" + userName;   
  101.                
  102.             //调用Ajax请求方法   
  103.             sendRequest( url, content );   
  104.         } else {   
  105.             //用来清空上一次提示错误留下来的信息   
  106.             clearErrorResp(response_obj);   
  107.             //设置元素节点中的html内容   
  108.             response_obj.innerHTML="用户名不能为空!请输入用户名!";   
  109.             //让光标停在用户名文本框中   
  110.             userName_obj.focus();      
  111.             return false;   
  112.         }   
  113.     }   

}

3.Servlet代码(RegisterCheckUsername.java):

Java代码

  1.     
  2. package com.ajax;   
  3.   
  4. import javax.servlet.http.HttpServlet;   
  5. import javax.servlet.http.HttpServletRequest;   
  6. import javax.servlet.http.HttpServletResponse;   
  7. import javax.servlet.ServletException;   
  8. import java.io.IOException;   
  9. import java.io.PrintWriter;   
  10.   
  11. /**  
  12.  * @author Seany  
  13.  *         <p>  
  14.  *         类功能:注册账号时,异步校验用户名是否已存在  
  15.  *         </p>  
  16.  */  
  17. public class RegisterCheckUsername extends HttpServlet {   
  18.   
  19.     protected void doPost(HttpServletRequest request,   
  20.             HttpServletResponse response) throws ServletException, IOException {   
  21.         doGet(request, response);   
  22.     }   
  23.   
  24.     protected void doGet(HttpServletRequest request,   
  25.             HttpServletResponse response) throws ServletException, IOException {   
  26.         request.setCharacterEncoding("utf-8");   
  27.         // 服务器响应内容格式为xml   
  28.         response.setContentType("text/xml");   
  29.         response.setCharacterEncoding("utf-8");   
  30.   
  31.         String userName = request.getParameter("userName");   
  32.   
  33.         // 真实开发中为业务层从数据库中获取数据   
  34.         String userInfo = "hello".equals(userName) ? userName : null;   
  35.   
  36.         boolean isExist = false;   
  37.         if (userInfo == null) {   
  38.             isExist = false;// "该用户名未被注册!";   
  39.         } else {   
  40.             isExist = true; // "该用户名已被注册过了!";   
  41.         }   
  42.   
  43.         PrintWriter out = null;   
  44.   
  45.         try {   
  46.             out = response.getWriter();   
  47.             out.print("<root>");   
  48.             out.print("<message>");   
  49.             out.print(isExist);   
  50.             out.print("</message>");   
  51.             out.print("</root>");   
  52.         } catch (Exception e) {   
  53.             e.printStackTrace();   
  54.         } finally {   
  55.             out.flush();   
  56.             out.close();   
  57.         }   
  58.     }   
  59. }  

4. web.xml

Xml代码

  1.      
  2. <?xml version="1.0" encoding="UTF-8"?>  
  3. <web-app version="2.4"    
  4.     xmlns="http://java.sun.com/xml/ns/j2ee"    
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  6.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  7.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  8.        
  9.     <servlet>  
  10.         <servlet-name>RCheckUsername</servlet-name>  
  11.         <servlet-class>com.ajax.RegisterCheckUsername</servlet-class>  
  12.     </servlet>  
  13.            
  14.     <servlet-mapping>  
  15.         <servlet-name>RCheckUsername</servlet-name>  
  16.         <url-pattern>/xmlCheckUsername</url-pattern>  
  17.     </servlet-mapping>  
  18.        
  19. </web-app>