ajax-2

  1. 1. 初始化XMLHttpRequest对象模版 
  2. function   createXmlHttpRequest(){ 
  3.    var xmlHttp; 
  4.    try{    //Firefox, Opera 8.0+, Safari 
  5.            xmlHttp=new XMLHttpRequest(); 
  6.     }catch (e){ 
  7.            try{    //Internet Explorer 
  8.                   xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
  9.             }catch (e){ 
  10.                   try{ 
  11.                           xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
  12.                   }catch (e){}   
  13.            } 
  14.     } 
  15.    return xmlHttp; 
  16. 2.手动编写ajax通用工具代码 
  17. //通过id获取dom对象 
  18. function $(id) { 
  19.     return document.getElementById(id); 
  20.  
  21. // ajax技术必须创建XMLHTTPRequest对象 ,获取XMLHTTPRequest对象的操作 
  22. function createXHR() { 
  23.     var xhr; 
  24.     var aVersion = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", 
  25.             "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp" ]; 
  26.     try { 
  27.         // 高版本ie、firefox、opera等浏览器直接new出ajax对象 
  28.         xhr = new XMLHttpRequest(); 
  29.     } catch (e) { 
  30.         // 低版本的IE,ie6以下版本需要通过以下操作创建ajax对象 
  31.         for ( var i = 0; i < aVersion.length; i++) { 
  32.             try { 
  33.                 xhr = new ActiveXObject(aVersion[i]); 
  34.                 return xhr; 
  35.             } catch (e) { 
  36.                 continue; 
  37.             } 
  38.         } 
  39.     } 
  40.     return xhr; 
  41. 3.ajax处理分页技术案例 
  42. window.onload = function() { 
  43.     // 获取按钮对象 
  44.     var queryBtnDom = $("queryBtn"); 
  45.  
  46.     // 给按钮设置点击事件操作 
  47.     queryBtnDom.onclick = function() { 
  48.  
  49.         var content = "pagination.nowPage=" + 1; 
  50.         var url = "./csdn/UserAction_query.action?time=" + new Date().getTime(); 
  51.         // 调用ajax处理过的请求发送操作 
  52.         sendPost(content, url, managerSuccess, managerFail); 
  53.  
  54.         // 处理成功的方法 
  55.         function managerSuccess(xhr) { 
  56.             // 创建出XML dom对象 
  57.             var XMLDom = xhr.responseXML; 
  58.             // 创建xml的跟对象 
  59.             var root = XMLDom.documentElement; 
  60.             // 获取跟对象的子节点 
  61.             var users = root.getElementsByTagName("user"); 
  62.             // 显示数据操作 
  63.             showUsers(users); 
  64.  
  65.             // 分页操作 
  66.             // 首页 
  67.             $("firstPage").onclick = function() { 
  68.                 // 给请求的数据重新设一下值,然后重新发送一回请求 
  69.                 content = "pagination.nowPage=" + 1; 
  70.                 sendPost(content, url, managerSuccess, managerFail); 
  71.             }; 
  72.             // 上一页 
  73.             $("backPage").onclick = function() { 
  74.                 // 给请求的数据重新设一下值,然后重新发送一回请求 
  75.                 content = "pagination.nowPage=" 
  76.                         + eval(root.getAttribute("nowPage") + "-" + 1); 
  77.                 sendPost(content, url, managerSuccess, managerFail); 
  78.  
  79.             }; 
  80.             // 下一页 
  81.             $("nextPage").onclick = function() { 
  82.                 // 给请求的数据重新设一下值,然后重新发送一回请求 
  83.                 content = "pagination.nowPage=" 
  84.                         + eval(root.getAttribute("nowPage") + "+" + 1); 
  85.                 sendPost(content, url, managerSuccess, managerFail); 
  86.  
  87.             }; 
  88.             // 末页 
  89.             $("lastPage").onclick = function() { 
  90.                 // 给请求的数据重新设一下值,然后重新发送一回请求 
  91.                 content = "pagination.nowPage=" 
  92.                         + root.getAttribute("countPage"); 
  93.                 sendPost(content, url, managerSuccess, managerFail); 
  94.             }; 
  95.         } 
  96.  
  97.         function managerFail(xhr) { 
  98.             alert("处理失败"); 
  99.         } 
  100.  
  101.     }; 
  102. }; 
  103.  
  104. // 封装一个创建Element元素的方法 
  105. function CE(tag) { 
  106.     return document.createElement(tag); 
  107. // 封装一个创建文本节点的方法 
  108. function CT(t) { 
  109.     return document.createTextNode(t); 
  110.  
  111. // 发送请求的方法 
  112. function sendPost(content, url, success, fail) { 
  113.     var xhr = createXHR(); 
  114.     // 触发器 
  115.     xhr.onreadystatechange = function() { 
  116.         if (xhr.readyState == 4) { 
  117.             if (xhr.status == 200 || xhr.status == 304) { 
  118.                 success(xhr); 
  119.             } else { 
  120.                 fail(xhr); 
  121.             } 
  122.         } 
  123.     }; 
  124.     // 打开请求 
  125.     xhr.open("POST", url, true); 
  126.     // 设置类型 
  127.     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  128.     // 发送请求 
  129.  
  130.     xhr.send(content); 
  131.     // }; 
  132.  
  133. // 显示数据的方法 
  134. function showUsers(users) { 
  135.     // 获取tbody的dom对象 
  136.     var tbodyDom = $("showUsers"); 
  137.     // 清空数据 
  138.     if (tbodyDom.hasChildNodes()) { 
  139.         for ( var jj = 0; jj < tbodyDom.childNodes.length;) { 
  140.             tbodyDom.removeChild(tbodyDom.childNodes[jj]); 
  141.         } 
  142.     } 
  143.  
  144.     // 遍历添加数据 
  145.     for ( var i = 0; i < users.length; i++) { 
  146.         var user = users[i]; 
  147.         if (user.nodeType == 1) { 
  148.             // 创建tr元素节点 
  149.             var tr = CE("tr"); 
  150.  
  151.             // 创建td元素节点 
  152.             // 创建一个复选框节点 
  153.             var td1 = CE("td"); 
  154.             var input = CE("input"); 
  155.             // 为td1设置属性 
  156.             input.setAttribute("type", "checkbox"); 
  157.             input.setAttribute("value", user.getAttribute("id")); 
  158.  
  159.             var td2 = CE("td"); 
  160.             var td3 = CE("td"); 
  161.             var td4 = CE("td"); 
  162.             var td5 = CE("td"); 
  163.             var td6 = CE("td"); 
  164.             var td7 = CE("td"); 
  165.  
  166.             // 将文本节点追加到td上;这里要注意不能使用方法链追加,否则界面会让你很难受 
  167.             td1.appendChild(input); 
  168.             td2.appendChild(CT(user.getAttribute("id"))); 
  169.             td3 
  170.                     .appendChild(CT(user.getElementsByTagName("name")[0].firstChild.nodeValue)); 
  171.             td4 
  172.                     .appendChild(CT(user.getElementsByTagName("sex")[0].firstChild.nodeValue)); 
  173.             td5 
  174. .appendChild(CT(user.getElementsByTagName("email")[0].firstChild.nodeValue));
  175.             td6 
  176.                     .appendChild(CT(user.getElementsByTagName("birthday")[0].firstChild.nodeValue)); 
  177.  
  178.             // 将td追加到tr上 
  179.             tr.appendChild(td1); 
  180.             tr.appendChild(td2); 
  181.             tr.appendChild(td3); 
  182.             tr.appendChild(td4); 
  183.             tr.appendChild(td5); 
  184.             tr.appendChild(td6); 
  185.             tr.appendChild(td7); 
  186.             // 将tr节点添加到tbody中 
  187.             tbodyDom.appendChild(tr); 
  188.         } 
  189.     } 
  190.  
  191. 用户名注册时使用ajax验证处理 
  192. window.onload=function(){ 
  193.     //根据id获取需要用ajax技术处理的数据的dom对象,util.js和reg.js位于同一包下,固可以相互引用 
  194.     var uNameDom = $("userName"); 
  195.     //为uNameDom注册失去焦点的事件 
  196.     uNameDom.onblur=function(){ 
  197.         //将获取到的用户名名称封装成请求数据 
  198.         var content = "uName="+uNameDom.value; 
  199.         //设置请求路径,并通过时间戳的形式产生唯一url 
  200.         var url = "./csdn/UserAction_checkName.action?time="+new Date().getTime(); 
  201.         //创建ajax对象 
  202.         var xhr = createXHR(); 
  203.          
  204.         //这里状态为0,状态吗的默认值是0,说明从0变1时才触发onreadystatechange事件 
  205.         //alert(xhr.readyState); 
  206.         //为xhr对象设置一个触发器事件,改事件服务器自己处理 
  207.         xhr.onreadystatechange=function(){ 
  208.             //alert(xhr.readyState);状态从1-4执行 
  209.             if(xhr.readyState==4){ 
  210.                 if(xhr.status==200||xhr.status==304){ 
  211.                     $("name").innerHTML=xhr.responseText; 
  212.                 } 
  213.             } 
  214.         }; 
  215.         //打开请求 
  216.         xhr.open("POST",url,true); 
  217.         //如果是post请求需要进行如下操作,告诉浏览器正在发送符合url编码的数据;括号内一个单词不能错,错一个就不能将数据传给servlet了 
  218.         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
  219.         //发送数据 
  220.         xhr.send(content); 
  221.     }; 
  222. }; 
  223.  
  224. Action处理代码 
  225. package www.csdn.project.action; 
  226.  
  227. import java.io.IOException; 
  228. import java.io.PrintWriter; 
  229. import javax.servlet.http.HttpServletResponse; 
  230. import org.apache.struts2.ServletActionContext; 
  231. import www.csdn.project.domain.User; 
  232. import www.csdn.project.service.UserService; 
  233. import www.csdn.project.service.UserServiceImpl; 
  234. import www.csdn.project.utils.Pagination; 
  235.  
  236. import com.opensymphony.xwork2.ActionSupport; 
  237.  
  238. public class UserAction extends ActionSupport { 
  239.      
  240.     private String uName; 
  241.      
  242.     //分页的当前页属性,这里一定要指明泛型所指向的类型,否则就会出错 
  243.     private Pagination<User> pagination; 
  244.      
  245.     //声明一个事务对象 
  246.     private UserService service = new UserServiceImpl(); 
  247.  
  248.     // 通过ServletActionContext类获取response对象,将在action中的操作转向servlet的操作 
  249.     private HttpServletResponse response = ServletActionContext.getResponse(); 
  250.      
  251.     //声明一个输出对象 
  252.     private PrintWriter out; 
  253.      
  254.      
  255.      
  256.  
  257.     public Pagination<User> getPagination() { 
  258.         return pagination; 
  259.     } 
  260.  
  261.     public void setPagination(Pagination<User> pagination) { 
  262.         this.pagination = pagination
  263.     } 
  264.  
  265.     public String getUName() { 
  266.         return uName; 
  267.     } 
  268.  
  269.     //一定要注意命名规范,set注入方法和get获值的方法首字母一定要大写,否则不起作用切记 
  270.     public void setUName(String uName) { 
  271.         this.uName = uName
  272.     } 
  273.      
  274.      
  275.     //登录操作 
  276.     public String login(){ 
  277.         return SUCCESS; 
  278.     } 
  279.  
  280.     //检查名字 
  281.     public String checkName() { 
  282.          
  283.         response.setContentType("text/html;charset=utf-8"); 
  284.          
  285.         //实例化out对象 
  286.         try { 
  287.             out = response.getWriter(); 
  288.         } catch (IOException e) { 
  289.             e.printStackTrace(); 
  290.         } 
  291.          
  292.         User entity = service.getObjectByName(uName); 
  293.  
  294.         if (entity != null) { 
  295.             out.print("用户名已经存在"); 
  296.         } else { 
  297.             out.print("用户名可以使用"); 
  298.         } 
  299.         out.flush(); 
  300.         out.close(); 
  301.         return "reg"; 
  302.     } 
  303.      
  304.      
  305.     //查找所有 
  306.     public String query(){ 
  307.          
  308.         response.setContentType("text/xml;charset=utf-8"); 
  309.         System.out.println(pagination.getNowPage()+"===================="); 
  310.         pagination = new Pagination<User>(User.class,pagination.getNowPage()); 
  311.         //实例化out对象 
  312.         try { 
  313.             out = response.getWriter(); 
  314.         } catch (IOException e) { 
  315.             e.printStackTrace(); 
  316.         } 
  317.  
  318.         //拼出xml文件,用来存放从数据库取出的数据 
  319.         out.println("<?xml version='1.0' encoding='UTF-8'?>"); 
  320.         out.println("<users nowPage='"+pagination.getNowPage()+"' countPage='"+pagination.getCountPage()+"' countRecond='"+pagination.getCountRecond()+"'>"); 
  321.         //遍历 
  322.         for(User entity: pagination.getEntities()){ 
  323.             out.print("<user id='"+entity.getId()+"'>"); 
  324.             out.print("<name>"); 
  325.             out.print(entity.getName()); 
  326.             out.print("</name>"); 
  327.             out.print("<sex>"); 
  328.             out.print(entity.getSex()); 
  329.             out.print("</sex>"); 
  330.             out.print("<birthday>"); 
  331.             out.print(entity.getBirthday()); 
  332.             out.print("</birthday>"); 
  333.             out.print("<email>"); 
  334.             out.print(entity.getEmail()); 
  335.             out.print("</email>"); 
  336.             out.print("</user>"); 
  337.         } 
  338.         out.println("</users>"); 
  339.          
  340.         //刷新out对象,使数据不把缓存中存,直接显示 
  341.         out.flush(); 
  342.         out.close(); 
  343.         return "xml"; 
  344.     } 
  345.  
  346.  
  347. 分页显示界面 
  348. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
  349. <%@ taglib uri="/struts-tags" prefix="s"%> 
  350. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  351. <html> 
  352. <head> 
  353. <title>用户管理界面</title> 
  354.  
  355. <script type="text/javascript" 
  356.     src="${ pageContext.request.contextPath }/js/util.js"></script> 
  357.  
  358. <script type="text/javascript" 
  359.     src="${ pageContext.request.contextPath }/js/user/query.js"></script> 
  360. </head> 
  361.  
  362. <body> 
  363.     <div align="center"> 
  364.         <div> 
  365.             <h3>用户管理界面</h3> 
  366.             <input type="button" value="会员管理" id="queryBtn" /> 
  367.         </div> 
  368.         <hr> 
  369.         <div> 
  370.             <!-- 显示从数据库提取的信息然后放到一个xml中再取出遍历的数据 --> 
  371.             <h3>显示数据</h3> 
  372.             <table bordercolor="teal" border="1px" cellspacing="0" 
  373.                 cellpadding="0" width="800px"> 
  374.                 <thead> 
  375.                     <tr> 
  376.                         <th>选择</th> 
  377.                         <th>序号</th> 
  378.                         <th>姓名</th> 
  379.                         <th>性别</th> 
  380.                         <th>邮箱</th> 
  381.                         <th>生日</th> 
  382.                         <th>操作</th> 
  383.                     </tr> 
  384.                 </thead> 
  385.                 <tbody id="showUsers"></tbody> 
  386.             </table> 
  387.             <div> 
  388.               <input type="button" value="首页" id="firstPage"/> 
  389.               <input type="button" value="上一页" id="backPage"/> 
  390.               <input type="button" value="下一页" id="nextPage"/> 
  391.               <input type="button" value="末页" id="lastPage"/> 
  392.             </div> 
  393.         </div> 
  394.     </div> 
  395. </body> 
  396. </html> 
  397.  
  398. 首界面 
  399. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
  400. <%@ taglib uri="/struts-tags" prefix="s"%> 
  401.  
  402.  
  403. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  404. <html> 
  405. <head> 
  406.  
  407.  
  408. <title>My JSP 'index.jsp' starting page</title> 
  409. <meta http-equiv="pragma" content="no-cache"> 
  410. <meta http-equiv="cache-control" content="no-cache"> 
  411. <meta http-equiv="expires" content="0"> 
  412. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
  413. <meta http-equiv="description" content="This is my page"> 
  414.  
  415.  
  416. <!-- 
  417.     不能在同一个界面引用多个ajax判断的js,如果这样做会只让下面的js起作用,上面引用的js不在判断, 
  418.     但是可以在上面js没有window.onload方法的情况可以同存,并且还可以调用它 
  419.     --> 
  420.  
  421.  
  422. <script type="text/javascript" 
  423.     src="${ pageContext.request.contextPath }/js/util.js"></script> 
  424.  
  425. <script type="text/javascript" 
  426.     src="${ pageContext.request.contextPath }/js/user/reg.js"></script> 
  427. </head> 
  428.  
  429. <body> 
  430.     <div align="center"> 
  431.         <div> 
  432.             <h3>后台管理登陆界面</h3> 
  433.  
  434.             <s:form action="UserAction_login" namespace="/csdn" theme="simple"> 
  435.                 <table> 
  436.                     <tr> 
  437.                         <td>用户名:</td> 
  438.                         <td><s:textfield id="userName" name="userName" /></td> 
  439.                         <td style="color: red; font-size: 10px;" id="name"></td> 
  440.                     </tr> 
  441.                     <tr> 
  442.                         <td>密码:</td> 
  443.                         <td><s:password id="userPass" name="userPass" /></td> 
  444.                         <td></td> 
  445.                     </tr> 
  446.                     <tr> 
  447.                         <td>邮箱:</td> 
  448.                         <td><s:textfield id="userEmail" name="userEmail" /></td> 
  449.                         <td></td> 
  450.                     </tr> 
  451.                     <tr> 
  452.                         <td colspan="3"><s:submit value="登录【注册】" /> 
  453.                         </td> 
  454.                     </tr> 
  455.                 </table> 
  456.             </s:form> 
  457.         </div> 
  458.  
  459.     </div> 
  460. </body> 
  461. </html> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值