《AJAX教程--董伟专》由会员分享,可在线阅读,更多相关《AJAX教程--董伟专(53页珍藏版)》请在金锄头文库上搜索。
1、AJAXAJAX教程教程-董伟专董伟专高级软件人才实作培训专家高级软件人才实作培训专家! !今天的课题lAJAX简介lXMLHttpRequest对象l数据格式l实现基本的Ajax技术作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !AJAX简介lAJAX全称为“AsynchronousJavaScriptandXML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术。它使用:使用XHTML+CSS来表示信息;使用Javascript操作DocumentObjectModel进行动态显示及交互;使用XML和XSLT进
2、行数据交换及相关操作;使用XMLHttpRequest对象与Web服务器进行异步数据交换;使用JavaScript将所有的东西绑定在一起。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !与传统的web应用比较 图1 Web的传统模型。客户端向服务器发送一个请求,服务器返回整个页面,如此反复图2 在Ajax模型中,数据在客户端与服务器之间独立传输。服务器不再返回整个页面Ajax:一种不用刷新整个页面便可与服务器通讯的办法作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !不用刷新整个页面便可与服务
3、器通讯的办法lFlashlJavaappletl框架:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动整个页面l隐藏的iframelXMLHttpRequest:该对象是对JavaScript的一个扩展,可使网页与服务器进行通信。是创建Ajax应用的最佳选择。实际上通常把Ajax当成XMLHttpRequest对象的代名词作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !Ajax工具包l“Ajax并不是一项技术,它实际上是几种技术,每种技术各尽其职,以一种全新的方式聚合在一起”l服务器端语言服务器端语言:服务器需要具备向浏览器
4、发送特定信息的能力。Ajax与服务器端语言无关。lXMLXML (eXtensible Markup Language,可扩展标记语言) 是一种描述数据的格式。Aajx 程序需要某种格式化的格式来在服务器和客户端之间传递信息,但 XML 只是其中的一种选择lXHTMLXHTML(eXtended Hypertext Markup Language,使用扩展超媒体标记语言)和 CSSCSS(Cascading Style Sheet,级联样式单)标准化呈现;lDOMDOM(Document Object Model,文档对象模型)实现动态显示和交互;l使用XMLHTTP组件XMLHttpRequ
5、estXMLHttpRequest对象进行异步数据读取;l使用JavaScriptJavaScript绑定和处理所有数据。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !Ajax的工作原理图xhtmlcssJavaScript作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !Ajax的缺陷lAJAX不是完美的技术。使用AJAX,它的一些缺陷不得不权衡一下:l由Javascript和AJAX引擎导致的浏览器的兼容l页面局部刷新,导致后退等功能失效。l对流媒体的支持没有FLASH、Java App
6、let好。l一些手持设备(如手机、PDA等)支持性差。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !小结lAjax并非是一个新的技术或者语言,他只是几项技术按一定的方式组合起来,在共同协作中发挥各自的作用。老技术,新技巧。lAjax主要功能特点:JavaScript用户体验;CSS样式定义;DOM组织视图;XML数据异步加载;XMLDocument/XMLHttpRequest。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !XMLHttpRequest对象lXMLHttpRequest对
7、象的概述lXMLHttpRequest对象的方法和属性lXMLHttpRequest对象发送请求基本步骤lAjax简单请求示例作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !javascript的两项强大性能lAJAX(异步javascript和XML)是个新产生的术语,专为描述javascript的两项强大性能.这两项性能在多年来一直被网络开发者所忽略,直到最近Gmail,Googlesuggest和googleMaps的横空出世才使人们开始意识到其重要性.l这两项被忽视的性能是:(1)无需重新装载整个页面便能向服务器发送请求.(2)对XM
8、L文档的解析和处理作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !向服务器发送请求if(window.XMLHttpRequest)/Mozilla,Safari,.http_request=newXMLHttpRequest();elseif(window.ActiveXObject)/IEhttp_request=newActiveXObject(Microsoft.XMLHTTP);作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !XMLHttpRequest的概述lXMLHttpReq
9、uest最早是在IE5中以ActiveX组件的形式实现的。非W3C标准.l创建XMLHttpRequest对象(由于非标准所以实现方法不统一) (1) Internet Explorer把XMLHttpRequest实现为一个ActiveXActiveX对象。 (2)其他浏览器(Firefox、Safari、Opera)把它实现为一个本地的JavaScript对象。 (3) XMLHttpRequest在不同浏览器上的实现是兼容的,所以可可以用同样的方式访问以用同样的方式访问XMLHttpRequestXMLHttpRequest实例的属性和方法实例的属性和方法,而不论这个实例创建的方法是什么
10、。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !创建XMLHttpRequest对象varxmlHttp;functioncreateXMLHttpRequest()if(window.ActiveXObject)xmlHttp=newActiveXObject(Microsoft.XMLHTTP);elseif(window.XMLHttpRequest)xmlHttp=newXMLHttpRequest();作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !XMLHttpRequest的
11、方法方法描述abort()停止当前请求getAllResponseHeaders()把HTTP请求的所有响应首部作为键/值对返回getResponseHeader(“header”)返回指定首部的串值open(“method”, “url”)建立对服务器的调用。Method参数可以是GET、POST或PUT.url参数可以是相对URL或绝对URL。send(content)向服务器发送请求setRequestHeader(“header”,“value”)把指定首部设置为所提供的值。在设置任何首部之前必须先调用open()作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高
12、级软件人才实作培训专家! !XMLHttpRequest的属性属性描述onreadystatechange每个状态改变是都会触发这个事件处理器,通常会调用一个javaScript函数readyState请求的状态,有5个可取值:0=未初始化、1=正在加载、2=已经加载、3=交互中、4=完成。responseText服务器的响应,表示为一个串。responseXML服务器的响应,表示为XML。这个对象可以解析为DOM对象。status服务器的HTTP状态码(200对应OK、404对应NotFount、等)statusTextHTTP状态码的相应文本(OK或NotFount等)作者:董伟专手机:1
13、3911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !发送请求l利用XMLHttpRequest实例与服务器进行通信包含以下3个关键部分: (1) onreadystatechangereadystatechange 事件处理函数 (2) open 方法 (3) send 方法作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !onreadystatechange:l该事件处理函数由服务器触发由服务器触发,而不是用户l在 Ajax 执行过程中,服务器会通知客户端当前的通信状态。这依靠更新 XMLHttpRequest 对
14、象的 readyState 来实现。改变改变 readyState readyState 属性是服务器对客户端连接操作属性是服务器对客户端连接操作的一种方式。每次的一种方式。每次 readyState readyState 属性的改变都属性的改变都会触发会触发 readystatechange readystatechange 事件事件作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !Open 方法lopen(methodmethod, urlurl, asynch, username, password)XMLHttpRequest 对象的
15、open 方法允许程序员用一个Ajax调用向服务器发送请求。method:请求类型,类似 “GET”或”POST”的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用GET(可以在GET请求里通过附加在URL上的查询字符串来发送数据,不过数据大小限制为2000个字符)。若需要向服务器发送数据,用POST。在某些情况下,有些浏览器会把多个在某些情况下,有些浏览器会把多个XMLHttpRequestXMLHttpRequest请求的结果缓请求的结果缓存在同一个存在同一个URLURL。如果对每个请求的响应不同,就会带来不好的结果。如果对每个请求的响应不同,就会带来不好的结果。在此将时间戳
16、追加到在此将时间戳追加到URLURL的最后,就能确保的最后,就能确保URLURL的唯一性,从而避免的唯一性,从而避免浏览器缓存结果。浏览器缓存结果。url:路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。asynch:表示请求是否要异步传输,默认值为true。指定true,在读取后面的脚本之前,不需要等待服务器的相应。指定false,当脚本处理过程经过这点时,会停下来,一直等到Ajax请求执行完毕再继续执行。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !Send方法lsend(data): open 方法定义了 Aj
17、ax 请求的一些细节,但是那些请求并没有被初始化。send 方法可为已经待命的请求发送指令。data:将要传递给服务器的字符串。若选用的是 GET 请求,则不会发送任何数据, 给 send 方法传递 null 即可:request.send(null);当向当向send()send()方法提供参数时,要确保方法提供参数时,要确保open()open()中指定的方法是中指定的方法是POSTPOST,如果没有数据作为请求体的一部分发送,则使用如果没有数据作为请求体的一部分发送,则使用null.null.完整的 Ajax 的 GET 请求示例:作者:董伟专手机:13911941890QQ:高级软件人
18、才实作培训专家高级软件人才实作培训专家! !setRequestHeader方法lsetRequestHeader(header,value)当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是首部信息用来声明一个请求是 GET GET 还是还是 POSTPOST。Ajax 请求中,发送首部信息的工作可以由 setRequestHeader该完成。参数header: 首部的名字参数value:首部的值。如果用 POST 请求向服务器发送数据,需要将 “Content-typeContent-t
19、ype” 的首部设置为 “application/x-www-form-urlendodedapplication/x-www-form-urlendoded”.它会告知服务器正在发送数据,并且数据已经符合URL编码了。该方法必须在该方法必须在open()open()之后才能调用之后才能调用完整的 Ajax 的 POST 请求示例:作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !接收相应l用 XMLHttpRequest 的方法可向服务器发送请求。在 Ajax 处理过程中,XMLHttpRequest 的如下属性可被服务器更改:readySt
20、atestatusresponseTextresponseXML作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !readyState方法readyState 属性表示Ajax请求的当前状态。它的值用数字代表。0 代表未初始化。 还没有调用 open 方法1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用2 代表已加载完毕。send 已被调用。请求已经开始3 代表交互中。服务器正在发送响应4 代表完成。响应发送完毕每次 readyState 值的改变,都会触发 readystatechange 事件。如果把 onread
21、ystatechange 事件处理函数赋给一个函数,那么每次 readyState 值的改变都会引发该函数的执行。readyState 值的变化会因浏览器的不同而有所差异。但是,当请求结束的时候,每个浏览器都会把当请求结束的时候,每个浏览器都会把 readyState readyState 的值同的值同意设为意设为 4 4作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !Status方法服务器发送的每一个响应也都带有首部信息。三位数的状态码是服务器发送的响应中最重要的首部信息,并且属于超文本传输协议中的一部分。常用状态码及其含义:404 没找到
22、页面(not found)403 禁止访问(forbidden)500 内部服务器出错(internal service error)200 200 一切正常一切正常(ok)(ok)304 304 没有被修改没有被修改(not modified)(not modified)在 XMLHttpRequest 对象中,服务器发送的状态码都保存在 status 属性里。通过把这个值和 200 200 或或 304304 比较,可以确保服务器是否已发送了一个成功的响应作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !responseText方法XMLH
23、ttpRequest 的 responseText 属性包含了从服务器发送的数据。它是一个HTML,XML或普通文本,这取决于服务器发送的内容。当当 readyState readyState 属性值变成属性值变成 4 4 时时, responseText 属性才可用,表明 Ajax 请求已经结束。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !responseXML方法如果服务器返回的是 XML, 那么数据将储存在 responseXML 属性中。只用服务器发送了带有正确首部信息的数据时, responseXML 属性才是可用的。 MIME
24、 类型必须为 text/xml作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !汇总作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !小结lXMLHttpRequest 对象是 Ajax 的核心和灵魂。它的方法和属性可用于实现异步请求,令Ajax 程序拥有快速的响应。l使用 XMLHttpRequest 对象的 3 个步骤:创建该对象的一个实例,使其可在不同的浏览器中运行。用 onreadystatechange 事件处理函数, open 方法, send 方法对一个请求进行初始化。通过 rea
25、dyState, status, responseText 或者 responseXML 来对服务器的响应进行处理作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !数据格式l在服务器端 AJAX 是一门与语言无关的技术。在业务逻辑层使用何种服务器端语言都可以。l从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送。服务器端的编程语言只能以如下 3 种格式返回数据:XMLJSONHTML作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !任务网页中的人员列表点击连接就会显示个人的信息作
26、者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !XMLlXML( eXtensible Markup Language )是一种通用的标记语言,用于对数据进行描述。l与其他语言的不同在于,它的标记不是事先规定的。它的文档结构需要遵循一定的规范,但是所用的词语则没有任何限制。lXML 是用来存储数据,而不是对数据进行操作。XML XML 声明。指定了文档所使声明。指定了文档所使用的用的XMLXML版本号和字符编码版本号和字符编码内容包含在标签内。每一对标签代内容包含在标签内。每一对标签代表一个元素。元素的名字包含在开表一个元素。元素的名字包含在开
27、始标签和结束标签内。元素的值也始标签和结束标签内。元素的值也位于开始标签和结束标签之间位于开始标签和结束标签之间作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实战XMLlIndex.html代码作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实战XMLlclearleft.css作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实战XMLandy.xmljeremy.xmlrichard.xml作者:董伟专手机:13911941890QQ:
28、高级软件人才实作培训专家高级软件人才实作培训专家! !实战XMLlfetchxml.js文件:getHTTPObject() grabFile(file)parseResponse(request)该函数用于服务器返回的 XML, 并将其转化为 HTMLXML 会通过HTTPRequest对象的 responseXML 属性获得。生成的 HTML 代码(这些信息放在 list 后的 div 元素中):调用调用调用调用作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !XML小结l优点:XML 是一种通用的数据格式。不必把数据强加到已定义好的格式中
29、,而是要为数据自定义合适的标记。利用 DOM 可以完全掌控文档。l缺点:如果文档来自于服务器,就必须得保证文档含有正确的首部信息。若文档类型不正确,那么 responseXML 的值将是空的。当浏览器接收到长的 XML 文件后, DOM 解析可能会很复杂。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !JSONlXML 的轻量级替代品,是一种基于文本的数据描述方式。lXML 使用开始标签和结束标签,JSON 是使用的是 冒号,逗号和大括号。lJSON 不是一种需要用 JavaScript 解释的数据格式:JSON 本身就是 JavaScrip
30、t作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !JSON作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !JSON实战index.html作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !JSON实战andy.jsjeremy.jsrichard.js作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !JSON实战lfetchjson.js文件:getHTTPObject() grabFile(
31、file)parseResponse(request)JSON 只是一种文本字符串。它被存储在 responseText属性中。为了读取存储在 responseText 属性中的 JSON 数据,需要根据 JavaScript 的 eval 语句。函数 eval 会把一个字符串当作它的参数。然后这个字符串会被当作 JavaScript 代码来执行。因为 JSON 的字符串就是由 JavaScript 代码构成的,所以它本身是可执行的。代码实例:作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !JSON 小结l优点:作为一种数据传输格式,JSON
32、 与 XML 很相似,但是它更加灵巧。JSON 不需要从服务器端发送含有特定内容类型的首部信息。l缺点:语法过于严谨代码不易读eval 函数存在风险作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实战HTMLindex.html作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实战HTMLandy.htmljeremy.htmlrichard.html作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实战HTMLlfetchjson.js文件:
33、getHTTPObject() grabFile(file)parseResponse(request) HTML 由一些普通文本组成。如果服务器通过 XMLHttpRequest 发送 HTML, 文本将存储在 responseText 属性中。不必从 responseText 属性中读取数据。它已经是希望的格式,可以直接将它插入到页面中。插入 HTML 代码最简单的方法是更新这个元素的 innerHTML 属性作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !HTML 小结l优点:从服务器端发送的 HTML 代码在浏览器端不需要用 Java
34、Script 进行解析。HTML 的可读性好。HTML 代码块与 innerHTML 属性搭配,效率高。l缺点:若需要通过 AJAX 更新一篇文档的多个部分,HTML 不合适innerHTML 并非 DOM 标准。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !小结l从服务器端返回 Ajax 相应的三种数据格式:XML:广泛应用,可以通过 DOM 进行解析JSON:可从远程服务器读取数据HTML:可以通过 innerHTML 直接插入到页面中。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !
35、实现基本的Ajax技术l完成验证l在Ajax之前,基于Web的应用必须提交整个页面才能验证数据,或者要依赖复杂的JavaScript来检查表单。在客户端编写的每一个验证例程都必须在客户端编写的每一个验证例程都必须在服务器上以某种方式重写,在服务器上以某种方式重写,因为用户有可能禁用JavaScript。l利用Ajax,你不用再受这个限制,不再只是编写简单的客户端验证和重复的逻辑。如果想为用户提供更能体现交互性的体验,可以简单地调用为服务器编写的验证例程。作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实现基本的Ajax技术原始页面原始页面输入
36、正确日期后的页面及提示信息输入正确日期后的页面及提示信息输入错误日期后的页面及提示信息输入错误日期后的页面及提示信息作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实现基本的Ajax技术l日期验证的关键:Java正则表达式类:java.util.regex.PatternJAVA日期验证 正则表达式,包括润二月:作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实现基本的Ajax技术l日期验证的关键:如果服务器端返回文件的格式是XML:则需要先把响应的内容类型设置为text/xml:respo
37、nse.setContentType(text/xml);把Cache-Control头部设置为no-cache可以阻止浏览器简单地从缓存中重载页面: response.setHeader(Cache-Control,no-cache);明确服务器端返回的 XML 文件的内容:在客户端解析服务器传过来的信息,并明确希望生成什么样的 HTML 代码:作者:董伟专手机:13911941890QQ:高级软件人才实作培训专家高级软件人才实作培训专家! !实现基本的Ajax技术l练习:把email作为注册用户名。需验证其格式的正确和在数据库中的唯一性。Java email验证的正则表达式:Stringregex=w+(-+.w+)*w+(-.w+)*.w+(-.w+)*;正确信息:Youhaveenteredavalidemail.格式错误信息:Youhaveenteredaninvalidemail.Email重复信息:Youremailhasbeensaved.作者:董伟专手机:13911941890QQ:结束结束