`
- 浏览:
186415 次
- 性别:
- 来自:
北京
-
- 1. 初始化XMLHttpRequest对象模版
- function createXmlHttpRequest(){
- var xmlHttp;
- try{ //Firefox, Opera 8.0+, Safari
- xmlHttp=new XMLHttpRequest();
- }catch (e){
- try{ //Internet Explorer
- xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
- }catch (e){
- try{
- xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
- }catch (e){}
- }
- }
- return xmlHttp;
- }
- 2.手动编写ajax通用工具代码
- //通过id获取dom对象
- function $(id) {
- return document.getElementById(id);
- }
-
- // ajax技术必须创建XMLHTTPRequest对象 ,获取XMLHTTPRequest对象的操作
- function createXHR() {
- var xhr;
- var aVersion = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0",
- "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp" ];
- try {
- // 高版本ie、firefox、opera等浏览器直接new出ajax对象
- xhr = new XMLHttpRequest();
- } catch (e) {
- // 低版本的IE,ie6以下版本需要通过以下操作创建ajax对象
- for ( var i = 0; i < aVersion.length; i++) {
- try {
- xhr = new ActiveXObject(aVersion[i]);
- return xhr;
- } catch (e) {
- continue;
- }
- }
- }
- return xhr;
- }
- 3.ajax处理分页技术案例
- window.onload = function() {
- // 获取按钮对象
- var queryBtnDom = $("queryBtn");
-
- // 给按钮设置点击事件操作
- queryBtnDom.onclick = function() {
-
- var content = "pagination.nowPage=" + 1;
- var url = "./csdn/UserAction_query.action?time=" + new Date().getTime();
- // 调用ajax处理过的请求发送操作
- sendPost(content, url, managerSuccess, managerFail);
-
- // 处理成功的方法
- function managerSuccess(xhr) {
- // 创建出XML dom对象
- var XMLDom = xhr.responseXML;
- // 创建xml的跟对象
- var root = XMLDom.documentElement;
- // 获取跟对象的子节点
- var users = root.getElementsByTagName("user");
- // 显示数据操作
- showUsers(users);
-
- // 分页操作
- // 首页
- $("firstPage").onclick = function() {
- // 给请求的数据重新设一下值,然后重新发送一回请求
- content = "pagination.nowPage=" + 1;
- sendPost(content, url, managerSuccess, managerFail);
- };
- // 上一页
- $("backPage").onclick = function() {
- // 给请求的数据重新设一下值,然后重新发送一回请求
- content = "pagination.nowPage="
- + eval(root.getAttribute("nowPage") + "-" + 1);
- sendPost(content, url, managerSuccess, managerFail);
-
- };
- // 下一页
- $("nextPage").onclick = function() {
- // 给请求的数据重新设一下值,然后重新发送一回请求
- content = "pagination.nowPage="
- + eval(root.getAttribute("nowPage") + "+" + 1);
- sendPost(content, url, managerSuccess, managerFail);
-
- };
- // 末页
- $("lastPage").onclick = function() {
- // 给请求的数据重新设一下值,然后重新发送一回请求
- content = "pagination.nowPage="
- + root.getAttribute("countPage");
- sendPost(content, url, managerSuccess, managerFail);
- };
- }
-
- function managerFail(xhr) {
- alert("处理失败");
- }
-
- };
- };
-
- // 封装一个创建Element元素的方法
- function CE(tag) {
- return document.createElement(tag);
- }
- // 封装一个创建文本节点的方法
- function CT(t) {
- return document.createTextNode(t);
- }
-
- // 发送请求的方法
- function sendPost(content, url, success, fail) {
- var xhr = createXHR();
- // 触发器
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4) {
- if (xhr.status == 200 || xhr.status == 304) {
- success(xhr);
- } else {
- fail(xhr);
- }
- }
- };
- // 打开请求
- xhr.open("POST", url, true);
- // 设置类型
- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- // 发送请求
-
- xhr.send(content);
- // };
- }
-
- // 显示数据的方法
- function showUsers(users) {
- // 获取tbody的dom对象
- var tbodyDom = $("showUsers");
- // 清空数据
- if (tbodyDom.hasChildNodes()) {
- for ( var jj = 0; jj < tbodyDom.childNodes.length;) {
- tbodyDom.removeChild(tbodyDom.childNodes[jj]);
- }
- }
-
- // 遍历添加数据
- for ( var i = 0; i < users.length; i++) {
- var user = users[i];
- if (user.nodeType == 1) {
- // 创建tr元素节点
- var tr = CE("tr");
-
- // 创建td元素节点
- // 创建一个复选框节点
- var td1 = CE("td");
- var input = CE("input");
- // 为td1设置属性
- input.setAttribute("type", "checkbox");
- input.setAttribute("value", user.getAttribute("id"));
-
- var td2 = CE("td");
- var td3 = CE("td");
- var td4 = CE("td");
- var td5 = CE("td");
- var td6 = CE("td");
- var td7 = CE("td");
-
- // 将文本节点追加到td上;这里要注意不能使用方法链追加,否则界面会让你很难受
- td1.appendChild(input);
- td2.appendChild(CT(user.getAttribute("id")));
- td3
- .appendChild(CT(user.getElementsByTagName("name")[0].firstChild.nodeValue));
- td4
- .appendChild(CT(user.getElementsByTagName("sex")[0].firstChild.nodeValue));
- td5
- .appendChild(CT(user.getElementsByTagName("email")[0].firstChild.nodeValue));
- td6
- .appendChild(CT(user.getElementsByTagName("birthday")[0].firstChild.nodeValue));
-
- // 将td追加到tr上
- tr.appendChild(td1);
- tr.appendChild(td2);
- tr.appendChild(td3);
- tr.appendChild(td4);
- tr.appendChild(td5);
- tr.appendChild(td6);
- tr.appendChild(td7);
- // 将tr节点添加到tbody中
- tbodyDom.appendChild(tr);
- }
- }
- }
-
- 用户名注册时使用ajax验证处理
- window.onload=function(){
- //根据id获取需要用ajax技术处理的数据的dom对象,util.js和reg.js位于同一包下,固可以相互引用
- var uNameDom = $("userName");
- //为uNameDom注册失去焦点的事件
- uNameDom.onblur=function(){
- //将获取到的用户名名称封装成请求数据
- var content = "uName="+uNameDom.value;
- //设置请求路径,并通过时间戳的形式产生唯一url
- var url = "./csdn/UserAction_checkName.action?time="+new Date().getTime();
- //创建ajax对象
- var xhr = createXHR();
-
- //这里状态为0,状态吗的默认值是0,说明从0变1时才触发onreadystatechange事件
- //alert(xhr.readyState);
- //为xhr对象设置一个触发器事件,改事件服务器自己处理
- xhr.onreadystatechange=function(){
- //alert(xhr.readyState);状态从1-4执行
- if(xhr.readyState==4){
- if(xhr.status==200||xhr.status==304){
- $("name").innerHTML=xhr.responseText;
- }
- }
- };
- //打开请求
- xhr.open("POST",url,true);
- //如果是post请求需要进行如下操作,告诉浏览器正在发送符合url编码的数据;括号内一个单词不能错,错一个就不能将数据传给servlet了
- xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
- //发送数据
- xhr.send(content);
- };
- };
-
- Action处理代码
- package www.csdn.project.action;
-
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts2.ServletActionContext;
- import www.csdn.project.domain.User;
- import www.csdn.project.service.UserService;
- import www.csdn.project.service.UserServiceImpl;
- import www.csdn.project.utils.Pagination;
-
- import com.opensymphony.xwork2.ActionSupport;
-
- public class UserAction extends ActionSupport {
-
- private String uName;
-
- //分页的当前页属性,这里一定要指明泛型所指向的类型,否则就会出错
- private Pagination<User> pagination;
-
- //声明一个事务对象
- private UserService service = new UserServiceImpl();
-
- // 通过ServletActionContext类获取response对象,将在action中的操作转向servlet的操作
- private HttpServletResponse response = ServletActionContext.getResponse();
-
- //声明一个输出对象
- private PrintWriter out;
-
-
-
-
- public Pagination<User> getPagination() {
- return pagination;
- }
-
- public void setPagination(Pagination<User> pagination) {
- this.pagination = pagination;
- }
-
- public String getUName() {
- return uName;
- }
-
- //一定要注意命名规范,set注入方法和get获值的方法首字母一定要大写,否则不起作用切记
- public void setUName(String uName) {
- this.uName = uName;
- }
-
-
- //登录操作
- public String login(){
- return SUCCESS;
- }
-
- //检查名字
- public String checkName() {
-
- response.setContentType("text/html;charset=utf-8");
-
- //实例化out对象
- try {
- out = response.getWriter();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- User entity = service.getObjectByName(uName);
-
- if (entity != null) {
- out.print("用户名已经存在");
- } else {
- out.print("用户名可以使用");
- }
- out.flush();
- out.close();
- return "reg";
- }
-
-
- //查找所有
- public String query(){
-
- response.setContentType("text/xml;charset=utf-8");
- System.out.println(pagination.getNowPage()+"====================");
- pagination = new Pagination<User>(User.class,pagination.getNowPage());
- //实例化out对象
- try {
- out = response.getWriter();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- //拼出xml文件,用来存放从数据库取出的数据
- out.println("<?xml version='1.0' encoding='UTF-8'?>");
- out.println("<users nowPage='"+pagination.getNowPage()+"' countPage='"+pagination.getCountPage()+"' countRecond='"+pagination.getCountRecond()+"'>");
- //遍历
- for(User entity: pagination.getEntities()){
- out.print("<user id='"+entity.getId()+"'>");
- out.print("<name>");
- out.print(entity.getName());
- out.print("</name>");
- out.print("<sex>");
- out.print(entity.getSex());
- out.print("</sex>");
- out.print("<birthday>");
- out.print(entity.getBirthday());
- out.print("</birthday>");
- out.print("<email>");
- out.print(entity.getEmail());
- out.print("</email>");
- out.print("</user>");
- }
- out.println("</users>");
-
- //刷新out对象,使数据不把缓存中存,直接显示
- out.flush();
- out.close();
- return "xml";
- }
-
- }
-
- 分页显示界面
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib uri="/struts-tags" prefix="s"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>用户管理界面</title>
-
- <script type="text/javascript"
- src="${ pageContext.request.contextPath }/js/util.js"></script>
-
- <script type="text/javascript"
- src="${ pageContext.request.contextPath }/js/user/query.js"></script>
- </head>
-
- <body>
- <div align="center">
- <div>
- <h3>用户管理界面</h3>
- <input type="button" value="会员管理" id="queryBtn" />
- </div>
- <hr>
- <div>
-
- <h3>显示数据</h3>
- <table bordercolor="teal" border="1px" cellspacing="0"
- cellpadding="0" width="800px">
- <thead>
- <tr>
- <th>选择</th>
- <th>序号</th>
- <th>姓名</th>
- <th>性别</th>
- <th>邮箱</th>
- <th>生日</th>
- <th>操作</th>
- </tr>
- </thead>
- <tbody id="showUsers"></tbody>
- </table>
- <div>
- <input type="button" value="首页" id="firstPage"/>
- <input type="button" value="上一页" id="backPage"/>
- <input type="button" value="下一页" id="nextPage"/>
- <input type="button" value="末页" id="lastPage"/>
- </div>
- </div>
- </div>
- </body>
- </html>
-
- 首界面
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib uri="/struts-tags" prefix="s"%>
-
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
-
-
- <title>My JSP 'index.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
-
-
- <!--
- 不能在同一个界面引用多个ajax判断的js,如果这样做会只让下面的js起作用,上面引用的js不在判断,
- 但是可以在上面js没有window.onload方法的情况可以同存,并且还可以调用它
- -->
-
-
- <script type="text/javascript"
- src="${ pageContext.request.contextPath }/js/util.js"></script>
-
- <script type="text/javascript"
- src="${ pageContext.request.contextPath }/js/user/reg.js"></script>
- </head>
-
- <body>
- <div align="center">
- <div>
- <h3>后台管理登陆界面</h3>
-
- <s:form action="UserAction_login" namespace="/csdn" theme="simple">
- <table>
- <tr>
- <td>用户名:</td>
- <td><s:textfield id="userName" name="userName" /></td>
- <td style="color: red; font-size: 10px;" id="name"></td>
- </tr>
- <tr>
- <td>密码:</td>
- <td><s:password id="userPass" name="userPass" /></td>
- <td></td>
- </tr>
- <tr>
- <td>邮箱:</td>
- <td><s:textfield id="userEmail" name="userEmail" /></td>
- <td></td>
- </tr>
- <tr>
- <td colspan="3"><s:submit value="登录【注册】" />
- </td>
- </tr>
- </table>
- </s:form>
- </div>
-
- </div>
- </body>
- </html>
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
4. **异步回调和服务端脚本**:讨论如何使用PageMethods、WebMethods和ServiceReferences进行异步服务器调用,以及如何在服务端编写响应AJAX请求的脚本。 5. **优化和性能**:探讨如何优化AJAX应用程序,减少延迟,...
【标题】"jsp编写的小工具代码"涉及到的主要知识点是Java Server Pages(JSP)技术,这是一种用于开发动态web应用程序的服务器端脚本语言。JSP是Java平台的一部分,它允许开发者将HTML、XML或者其他标记语言与Java...
接下来,我们需要为GridView的事件编写服务器端代码。例如,对于RowUpdating事件,我们需要获取用户输入的新值,更新数据库记录,然后重新绑定GridView以反映更改。由于我们在UpdatePanel中,这些操作不会导致整个...
6. **编程语言和库**:如果工具是用 JavaScript 编写的,可以介绍 JavaScript 在 Web 抓取中的角色,以及可能使用的库如 Puppeteer 或 Selenium。 7. **自动化工具**:讲解如何利用浏览器扩展或自定义脚本来自动化...
6. **Ajax与jQuery结合应用**:通过案例分析,展示如何利用jQuery简化Ajax代码,实现更高效、更流畅的页面交互。 **课程中的源码部分**将帮助你深入理解这些概念,你可以直接运行和调试代码,实践所学知识。源码...
在现代Web开发中,AJAX(Asynchronous JavaScript and XML)技术已经成为提升用户体验的重要工具,它允许网页在不刷新整个页面的情况下与服务器进行数据交互。结合JSON(JavaScript Object Notation)作为数据交换...
在Asp.net框架下,C#可以编写服务器端代码,处理用户请求,管理数据,以及创建复杂的业务逻辑。 Asp.net是微软的Web应用程序开发平台,它提供了丰富的工具和库,允许开发者使用C#等语言构建动态网站和Web服务。Asp...
在IT行业中,前端开发是构建Web应用程序的关键部分,而AJAX(Asynchronous JavaScript and XML)技术则是提升用户体验的重要工具。本话题将详细讲解如何在图书馆管理页面中利用AJAX实现图书的添加、删除和判断功能,...
文章可能会涵盖JavaScript的Ajax实现、数据库查询优化以及前后端交互等方面的知识。 综上所述,Ajax分页技术是提高Web应用性能的重要手段,它结合了前端的JavaScript和后端的数据库操作,为用户提供了一种高效且...
在.NET开发环境中,Visual Studio(VS)是许多开发者首选的集成开发环境,它提供了丰富的工具和技术支持,其中包括对AJAX的全面支持。AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,允许页面在...
6. **Ajax库与框架**:虽然可以手动编写Ajax代码,但jQuery、axios、fetch等库和框架提供了更方便的API。这部分可能涉及这些工具的使用,包括如何简化请求过程、错误处理以及链式调用。 7. **Ajax与RESTful API**:...
在"WebApplication2"这个项目中,可能包含了使用jQuery进行Ajax请求并处理JSON数据的实例代码。这些源码可以帮助初学者了解如何在实际项目中整合这些技术。通过阅读和学习这些案例,你可以更好地理解如何发起Ajax...
在实现Ajax功能时,开发者可能需要在SqlYog中编写SQL语句来处理数据的增删改查,然后在SSM项目中配置MyBatis的Mapper文件,将SQL语句映射到Java方法上,以便在服务端处理Ajax请求。 具体到文件名"exam_4",这可能是...
1. **JavaScript分析与解释**:对JavaScript代码进行分析,提取其中与Ajax相关的部分,以便理解其工作原理。 2. **DOM事件处理与触发**:模拟用户的交互行为,如点击按钮等,触发页面中的DOM事件,进而触发Ajax...
- 如何编写前端JavaScript代码发起Ajax请求。 - 如何在服务器端处理Ajax请求并返回数据。 - 如何使用返回的数据更新页面内容。 ### 结语 通过以上分析可以看出,“Ajax on Rails”PPT文档涵盖了从理论到实践的多个...
4. **错误调试**:学会如何在AJAX环境中定位和解决问题,这包括查看浏览器的开发者工具和使用ASP.NET的调试工具。 综上所述,ASP.NET 2.0 AJAX结合XML-Script提供了强大的工具,用于构建富客户端Web应用。通过深入...
4. **可视化界面设计**:通过拖拽式界面设计工具,可以快速构建用户界面,无需编写大量前端代码。 5. **多数据源支持**:BOS支持多种数据库,如Oracle、SQL Server、MySQL等,方便与现有系统集成。 6. **VB开发...
这本书的核心内容可能涵盖了多个方面,包括但不限于基础理论、实战技巧以及具体的案例分析。通过学习这本书,开发者可以提升在创建交互性强、响应迅速的Web应用方面的能力。 ASP.NET是微软推出的一种用于构建Web...