`
AILIKES
  • 浏览: 186528 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编写ajax同用工具代码以及案例分析

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

相关推荐

    AJAX高级编程源代码

    4. **异步回调和服务端脚本**:讨论如何使用PageMethods、WebMethods和ServiceReferences进行异步服务器调用,以及如何在服务端编写响应AJAX请求的脚本。 5. **优化和性能**:探讨如何优化AJAX应用程序,减少延迟,...

    jsp编写的小工具代码

    【标题】"jsp编写的小工具代码"涉及到的主要知识点是Java Server Pages(JSP)技术,这是一种用于开发动态web应用程序的服务器端脚本语言。JSP是Java平台的一部分,它允许开发者将HTML、XML或者其他标记语言与Java...

    Ajax 操作实例 ASP.NET实例

    接下来,我们需要为GridView的事件编写服务器端代码。例如,对于RowUpdating事件,我们需要获取用户输入的新值,更新数据库记录,然后重新绑定GridView以反映更改。由于我们在UpdatePanel中,这些操作不会导致整个...

    Chrome、Edge;Ajax 数据采集工具.zip

    6. **编程语言和库**:如果工具是用 JavaScript 编写的,可以介绍 JavaScript 在 Web 抓取中的角色,以及可能使用的库如 Puppeteer 或 Selenium。 7. **自动化工具**:讲解如何利用浏览器扩展或自定义脚本来自动化...

    Ajax和Jquery入门教程[课件+源码]

    6. **Ajax与jQuery结合应用**:通过案例分析,展示如何利用jQuery简化Ajax代码,实现更高效、更流畅的页面交互。 **课程中的源码部分**将帮助你深入理解这些概念,你可以直接运行和调试代码,实践所学知识。源码...

    ajax+json实例

    在现代Web开发中,AJAX(Asynchronous JavaScript and XML)技术已经成为提升用户体验的重要工具,它允许网页在不刷新整个页面的情况下与服务器进行数据交互。结合JSON(JavaScript Object Notation)作为数据交换...

    C# Asp.net Jquery Ajax 经典案例

    在Asp.net框架下,C#可以编写服务器端代码,处理用户请求,管理数据,以及创建复杂的业务逻辑。 Asp.net是微软的Web应用程序开发平台,它提供了丰富的工具和库,允许开发者使用C#等语言构建动态网站和Web服务。Asp...

    图书馆添加删除判断 ajax.get 请求 ajax.post响应 考试专用

    在IT行业中,前端开发是构建Web应用程序的关键部分,而AJAX(Asynchronous JavaScript and XML)技术则是提升用户体验的重要工具。本话题将详细讲解如何在图书馆管理页面中利用AJAX实现图书的添加、删除和判断功能,...

    ajax分页

    文章可能会涵盖JavaScript的Ajax实现、数据库查询优化以及前后端交互等方面的知识。 综上所述,Ajax分页技术是提高Web应用性能的重要手段,它结合了前端的JavaScript和后端的数据库操作,为用户提供了一种高效且...

    VS中AJAX组件案例及源码

    在.NET开发环境中,Visual Studio(VS)是许多开发者首选的集成开发环境,它提供了丰富的工具和技术支持,其中包括对AJAX的全面支持。AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,允许页面在...

    疯狂ajax 讲义 第三版 源码 01-05

    6. **Ajax库与框架**:虽然可以手动编写Ajax代码,但jQuery、axios、fetch等库和框架提供了更方便的API。这部分可能涉及这些工具的使用,包括如何简化请求过程、错误处理以及链式调用。 7. **Ajax与RESTful API**:...

    jqury ajax json 案例源码

    在"WebApplication2"这个项目中,可能包含了使用jQuery进行Ajax请求并处理JSON数据的实例代码。这些源码可以帮助初学者了解如何在实际项目中整合这些技术。通过阅读和学习这些案例,你可以更好地理解如何发起Ajax...

    ajax加载数据模板

    在实现Ajax功能时,开发者可能需要在SqlYog中编写SQL语句来处理数据的增删改查,然后在SSM项目中配置MyBatis的Mapper文件,将SQL语句映射到Java方法上,以便在服务端处理Ajax请求。 具体到文件名"exam_4",这可能是...

    网络爬虫爬取Ajax

    1. **JavaScript分析与解释**:对JavaScript代码进行分析,提取其中与Ajax相关的部分,以便理解其工作原理。 2. **DOM事件处理与触发**:模拟用户的交互行为,如点击按钮等,触发页面中的DOM事件,进而触发Ajax...

    Ajax on Rails (PPT)

    - 如何编写前端JavaScript代码发起Ajax请求。 - 如何在服务器端处理Ajax请求并返回数据。 - 如何使用返回的数据更新页面内容。 ### 结语 通过以上分析可以看出,“Ajax on Rails”PPT文档涵盖了从理论到实践的多个...

    ASP.NET 2.0 AJAX入门经典实例,有很好的参考价值,XML-Script

    4. **错误调试**:学会如何在AJAX环境中定位和解决问题,这包括查看浏览器的开发者工具和使用ASP.NET的调试工具。 综上所述,ASP.NET 2.0 AJAX结合XML-Script提供了强大的工具,用于构建富客户端Web应用。通过深入...

    金蝶 BOS 开发样例代码及说明

    4. **可视化界面设计**:通过拖拽式界面设计工具,可以快速构建用户界面,无需编写大量前端代码。 5. **多数据源支持**:BOS支持多种数据库,如Oracle、SQL Server、MySQL等,方便与现有系统集成。 6. **VB开发...

    ASP.NET+Ajax网站开发典型实例

    这本书的核心内容可能涵盖了多个方面,包括但不限于基础理论、实战技巧以及具体的案例分析。通过学习这本书,开发者可以提升在创建交互性强、响应迅速的Web应用方面的能力。 ASP.NET是微软推出的一种用于构建Web...

Global site tag (gtag.js) - Google Analytics