




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
小乐Ajax开发技术经验交流通过本章的学习可以达到以下的目标:1. 掌握Ajax技术的主要作用。2. 掌握XMLHttpRequest对象的作用,并可以使用XMLHttpRequest对象进行操作。3. 可以使用XML+Ajax实现页面的局部刷新功能。Ajax技术主要完成页面的局部刷新,通过Ajax技术可以使之前的应用程序在每次提交时不用进行页面的整体刷新,从而提升操作的性能,在Ajax中主要是依靠XMLHttpRequest对象完成操作,下面小乐将对Ajax技术的特点及使用进行讲解。提示 Ajax技术的最早使用者。Ajax技术的最早使用者是Google,例如,Google Maps就大量地应用了Ajax技术。随后的Yahoo、Amazon(亚马逊)也陆续开始应用此技术。Ajax技术简介Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)并不是一项新的技术,它产生的主要目的是用于页面的局部刷新。从之前的代码开发中可以发现,每当用户向服务器端发出请求时,哪怕需要的只是简单地更新一点点的局部内容,服务器端都会将一个整体的页面进行刷新,并重新生成代码,这样一来程序的性能肯定会有所降低的。而如果采用Ajax技术,就可以实现局部的内容变更,从而使处理的性能要比前者高很多。因为采用的是局部刷新技术,所以整个页面并不会随着用户的每次请求而整体变化,只会在局部的位置上有所改变,这样的实现方式会使程序的性能更高。提示:关于Ajax技术作用的解释。小乐我举一个简单的例子分析一下什么是Ajax。你在宴请朋友的时往往会选择去饭店聚餐,大家一起点菜吃饭,等所有的菜都已经上桌时发现有一盘菜出现了问题(可能出现了某些类似小强的物种在菜中),那么现在宾客们有两种选择了:第一种全桌的菜换掉,第二种只换掉有问题的菜。很明显,大部分人都会采用只换一盘菜的做法,因为如果要全桌的菜都换掉,则肯定需要重新进入漫长的等待,而如果只换掉一盘菜,那么等待的时间就相对较少,而且在等待时可以先吃其他的菜。这实际上就是局部刷新的操作原理,Ajax完成的就是这种局部的刷新功能。Ajax本身是一门综合性的技术,其主要应用包含了HTML、JavaScript、XML、DOM、XMLHttpRequest等页面技术,但是在这之中最重要的就是XMLHttpRequest对象。提示:Ajax技术并不只依赖于Java。Ajax技术并不是只能在Java中使用,现在动态Web实现技术,如PHP、ASP.NET都已经很好地支持了Ajax技术。XMLHttpRequest对象在Ajax中主要是通过XMLHttpRequest对象处理发送异步请求和回应的,此对象最早是在IE5中以ActiveX组件的形式出现的,一直到2005年之后才被广泛地使用。而如果要创建一个XMLHttpRequest对象则必须使用JavaScript,创建的语句如下:例 小乐.1 创建XMLHttpRequest对象-create_ajax.htm小乐在学Ajax. var xmlHttp; /Ajax核心对象名称 function createXMLHttp() /创建XMLHttpRequest核心对象 if(window.XMLHttpRequest) /判断当前使用的浏览器类型 xmlHttp = new XMLHttpRequest(); /表示使用的是FireFox内核的浏览器 else /表示使用的是IE内核的浏览器 xmlHttp = new ActiveXObject(Microsoft.XMLHttp); 本程序创建了一个XMLHttpRequest的对象,但是在创建之前必须首先确定出用户当前被使用的浏览器类型,之后根据浏览器类型创建合适的XMLHttpRequest对象,如果为普通的FireFox(火狐浏览器),则直接使用new XMLHttpRequest()的方式创建;而如果为IE浏览器,则通过new ActiveXObject()的方式进行创建。在XMLHttpRequest对象中定义了许多属性,要想使用此对象就需要首先了解这些属性的作用。NO.属 性 描 述1onreadystatechange指定当readState状态改变时使用的操作,一般用于指定具体的回调函数2readyState返回当前请求的状态,只读3responseBody将回应信息正文以unsigned byte 数组形式返回,只读4responseStream以Ado Stream对象的形式返回响应信息,只读5responseText接收以普通文本返回的数据,只读6responseXML接收以XML文档形式回应的数据,只读7status返回当前请求的http状态码,只读8statusText 返回当前请求的响应行状态,只读readState 一共有5中取值,分别介绍如下。1. 0 : 请求没有发出(在调用open()函数之前)。2. 1 : 请求已经建立但还没有发出(在调用send()函数之前)3. 2 : 请求已经发出正在处理之中(这里通常可以从响应得到内存头部)4. 3 : 请求已经处理,正在接收服务器的信息,响应中通常有部分数据可用,但是服务器还没有完成响应5. 4 : 响应已完成,可以访问服务器响应并使用它。在使用XMLHttpRequest对象进行操作时也要使用到此对象中的方法,其方法如下表。NO. 方 法描 述1 abort()取消当前所发出的请求2 getAllRequestHeaders()取消所有的HTTP头信息3 getResponseHeader()取得一个指定的HTTP头信息4 open()创建一个HTTP请求,并指定请求模式,如GET请求或POST请求5 send()将创建的请求发送到服务器端,并接收回应信息6 setRequestHeader()设置一个指定请求的HTTP头信息XMLHttpRequest对象的open()和send()方法在回调函数中出现较多,一般都会用open()方法设置一个提交的路径,并通过地址重写的方式设置一些请求的参数,而真正的发出请求操作可以通过send()方法完成。下面通过具体的实例来讲解这些操作的使用。第一个Ajax程序掌握了XMLHttpRequest对象的主要属性及方法的作用后,下面通过一段代码来让读者完整地理解一个Ajax的应用。为了操作简单,本程序在返回数据时只是简单返回一个普通的文本数据。例 小乐.2 返回数据的页面-content.htmI like JavaWeb!可以发现在本页面中没有任何的HTML元素修饰,只是一行简单的输出,这是因为在回应时,如果存在过多的HTML代码会给操作带来麻烦。例 小乐.3 使用异步处理-ajax_receive_content.htm小乐在学Ajax技术 var xmlHttp; function createXMLHttp() if(window.XMLHttpRequest) xmlHttp = new XMLHttpRequest(); else xmlHttp = new ActiveXObject(Microsoft.XMLHTTP); function showMsg() createXMLHttp(); xmlHttp.open(post,content.htm); xmlHttp.onreadystatechange = showMsgCallback; xmlHttp.send(null); function showMsgCallback() if(xmlHttp.readyState=4) if(xmlHttp.status=200) var text =xmlHttp.responseText; document.getElementById(msg).innerHTML= text; 在本程序中,当单击按钮操作时会调用showMsg()函数,在showMsg()函数中首先调用createXMLHttp()函数创建xmlHttp对象,之后showMsgCallback()函数完成内容的接收,在接收时,分别通过 readState=4(判断是否发送完毕) 和 status=200(200的HTTP状态码表示操作正确) 判断操作是否正确完成,最后通过responseText接收返回的内容,并将其设置到msg元素中进行显示。通过本程序可以清楚地发现,Ajax完成的就是局部的内容刷新,并通过JavaScript将内容设置到指定的显示区域。异步验证通过第一个Ajax程序你应该已经清楚Ajax的主要方法,当然,第一个程序本身非常简单,因为异步请求的是一个静态页面,也可以将其定义成一个动态页,进行一些更复杂的操作。登录注册的程序你应该不陌生,但是如果要注册,则首先必须保证的是一个用户的ID不能重复,那么这种用于检测用户ID的操作就可以通过Ajax完成,当用户输入ID之后,会使用Ajax将信息提交到服务器上进行验证,如果此ID没有被人使用,则提示正确里如果有人使用,则提示错误信息。本程序使用user表的结构,如下表:NO.1 列 名 称 描 述1 Userid保存用户的登录ID号2Name用户的真实姓名3 Password用户密码提示:异步验证时要执行用JavaScript操作。在本程序中,当用户输入完ID之后肯定要选择其他的控件来执行下一步的操作,那么此时就可以利用onblur()(丢失焦点)的事件,将用户ID通过Ajax提交到服务器上完成数据验证。例 小乐.4 编写注册表单页-regist.htmAjax注册验证 var xmlHttp; /Ajax核心对象名称 var flag; /定义标志位 function createXMLHttp() /创建XMLHttpRequest核心对象 if(window.XMLHttpRequest) /判断当前使用的浏览器类型 xmlHttp = new XMLHttpRequest(); /表示使用的是FireFox内核浏览器 else xmlHttp = new ActiveXObject(Microsoft.XMLHttp);/使用的是IE内核浏览器 function checkUserid(userid) createXMLHttp(); /建立XMLHttp对象 xmlHttp.open(post,CheckServlet?userid=+userid);/设置一个请求,通过地质重写的方式将userid传递到JSP中 xmlHttp.onreadystatechange = checkUseridCallback;/设置请求完成之后处理的回调函数 xmlHttp.send(null); /发送请求,不传递任何参数 document.getElementById(msg).innerHTML = 正在验证.; function checkUseridCallback() /定义回调函数 if(xmlHttp.readyState=4) /数据返回完毕 if(xmlHttp.status=200) /HTTP操作正常 var txt = xmlHttp.responseText; /接收返回的内容 if(text=true) flag = false; /无法提交表单 document.getElementByID(msg).innerHTML = 用户ID重复,无法使用! else flag = true; /可以提交表单 document.getElementById(msg).innerHTML = 此用户ID可以注册!; function checkForm() return flag; 用户ID: 姓名: 密码: 在本页面中使用了Ajax验证用户名ID是否重复,当用户输入完userid的内容之后,会触发失去焦点(onblur)事件,调用checkUserid()函数,将输入的用户ID传递到服务器上进行验证,如果服务器返回的内容是true,则表示此ID可以使用,如果返回false,则表示此ID无法使用,同时表单也无法进行提交。例 小乐.5 验证用户名是否存在-CheckServlet.javapackage org.lxh.ajaxdemo;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CheckServlet extends HttpServlet public static final String DBDriver =org.git.mm.mysql.Driver; public static final String DBURL =jdbc:mysql:/localhost:8080/ajax; public static final String DBUSER = root; public static final String DBPASS= xiaole; public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException this.doPost(request, response); public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException request.setCharacterEncoding(GBK); response.setContentType(text/html); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; PrintWriter out = response.getWriter(); String userid = request.getParameter(userid); try Class.forName(DBDriver); conn =DriverManager.getConnection(DBURL,DBUSER,DBPASS); String sql = select * from user where userid=?; pstmt = conn.prepareStatement(sql); pstmt.setString(1, userid); rs = pstmt.executeQuery(); if(rs.next() if(rs.getInt(1)0) out.print(true); else out.print(false); out.flush(); out.close(); catch(ClassNotFoundException e) e.printStackTrace(); catch(SQLException e) e.printStackTrace(); finally try if(pstmt!=null) pstmt.close(); pstmt = null; if(rs!=null) rs.close(); rs = null; if(conn!=null) conn.close(); conn = null; catch(SQLException e) e.printStackTrace(); 在CheckServlet.java中首先接收发送过来的userid参数,之后在数据库中验证此数据是否存在,如果存在则返回true,否则返回false。返回XML数据在XMLHttpRequest对象中可以使用responseXML()方法接收一组返回的XML数据,这些返回的XML数据可以动态生成(利用JDOM工具将数据库中的数据变为XML文件),也可以直接读取一个XML文件,当客户端接收到读取的XML文件之后,可以通过DOM文件,并采用DOM解析的方式动态生成下拉列表框。例 小乐.6 要返回XML文件-allarea.xml 1 北京 2 天津 3 南京 例 小乐.7 使用Ajax解析XML,并生成下拉列表框-ajax_select.htmAjax 技术 var xmlHttp; function createXMLHttp() if(window.XMLHttpRequest) xmlHttp = new XMLHttpRequest(); else xmlHttp = new ActiveXObject(Microsoft.XMLHttp); function getCity() createXMLHttp(); xmlHttp.open(post,allarea.xml); xmlHttp.onreadystatechange = getCityCallback; xmlHttp.send(null); function getCityCall
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程造价资料员培训课件
- 工程课件软件
- 二零二五年度城市综合体车位买卖及增值服务合同
- 二零二五版水电站施工三通一平合同范本
- 喜庆的元宵节作文(15篇)
- 工程维修流程培训课件
- 工业设备采购及安装调试服务合同
- 疟疾的诊断与防治
- 体育行业运动员伤病保险责任免除合同
- 渔业养殖及水产销售责任合同书
- 2024年煤矿安全规程(修订)
- 酒店客房房价促销方案范文
- 药厂环保知识培训课件
- DB3301T 0378-2022 城市照明质量评价规范
- 【指导规则】央企控股上市公司ESG专项报告参考指标体系
- 《慢性乙型肝炎防治指南(2022年版)-》解读
- 制造业数字化生产与质量管理方案设计
- 部编版初中语文7-9年级教材必背古诗词、古文99篇详细解析及欣赏
- 划线及交通设施工程施工方案
- 知识产权尽职调查报告
- 电子病历信息安全管理制度
评论
0/150
提交评论