JavaScript面向对象及ExtJS基础)解析课件

上传人:94****0 文档编号:241320167 上传时间:2024-06-17 格式:PPT 页数:67 大小:1.81MB
返回 下载 相关 举报
JavaScript面向对象及ExtJS基础)解析课件_第1页
第1页 / 共67页
JavaScript面向对象及ExtJS基础)解析课件_第2页
第2页 / 共67页
JavaScript面向对象及ExtJS基础)解析课件_第3页
第3页 / 共67页
点击查看更多>>
资源描述
AjaxAjax基础知识介基础知识介绍绍lAjax基础知识介绍1用传统方式校验用户名是否重复l用传统方式校验用户名是否重复2传统方式校验用户名是否重复的设传统方式校验用户名是否重复的设计分析计分析RegUserUIReguser.jspRegUserMain.jsp注册校验用户名是否重复VerifyUserName?返回怎样的一个页面l传统方式校验用户名是否重复的设计分析RegUserUIReg3传统实现方式1:在原来的主窗口中回显结果n问题:q1:回显的页面在原来网页效果的基础上增加一点内容,可是服务器的响应结果会覆盖掉窗口中原来显示的那个网页内容,如果服务器在响应时仅仅回送要新增的内容,则会覆盖掉原来的整个网页,怎样做才能看到原来网页效果的基础上增加一点内容?q2:怎样用javascript代码将请求发送给服务器,在发送请求时,怎样将文本框中填写的用户名作为参数传递给服务器。q3:怎样在标签中触发javascript函数调用?触发函数时要注意返回值。n实现思路:q让VerifyUserName仍然返回Reguser.jsp,这时候需要在Reguser.jsp页面中增加一条有时候显示,有时候不显示的提示信息。或者是通过生成一段javascript代码,然后用一个弹出对话框来显示提示信息。先用浏览器直接测试VerifyUserName。q在标签中可以使用javascript协议或onclick事件来触发javascript函数调用,先用静态数据测试一下,然后用window.location.href属性(replace方法)或模拟表单提交的方式向服务器发送请求,把两种方式都要做一下。n缺点:q要为电脑增加一个鼠标,由于浏览器的特点是买回鼠标就会覆盖掉原来的电脑,所以,要想显示出电脑加鼠标的效果,只能同时去买回一个电脑和鼠标。q好比舞台要切换帷幕一样,上一场的帷幕上贴的是花,当下一场要换成贴龙时,最快的方式不是把原来帷幕上的花揭下来再换上龙,而是做两个帷幕,直接把上一个帷幕收起,同时把下一个帷幕拉开。每次都送出一个帷幕,帷幕上贴不同内容。l传统实现方式1:在原来的主窗口中回显结果问题:4传统实现方式2:用弹出的新窗口回显结果n实现方式:在弹出窗口中回显结果q弹出窗口演示q模态对话框演示n实现思路:q由弹出窗口打开一个网页的方式发出校验用户名的请求,回送的应该是一个网页,只是这个网页的内容很简单,但是,如果要有关闭按钮,必须加上相应的按钮和javascript代码。q模态对话框的好处在于避免了受浏览器显示新窗口的方式的差异的影响,并可要求用户必须关闭弹出窗口后才能进行其他操作。n特点:n服务器回送的结果给新窗口,不影响原始窗口。一个帷幕收起,同时把下一个帷幕拉开。每次都送出一个帷幕,帷幕上贴不同内容。l传统实现方式2:用弹出的新窗口回显结果实现方式:在弹出窗口5什么是AjaxnAjax的概念:q是asynchronousjavascriptandxml的简写。q不是一项具体的技术,而是几门技术的综合应用。q其核心只不过是要在javascript中调用一个叫XMLHttpRequest的javascript类,这个类可以与Web服务器使用HTTP协议进行交互,程序不通过浏览器发出请求,而是用这个特殊的JavaScript对象发送请求,再由这个JavaScript对象接收响应,并将响应结果用DOM编程方式挂到原来的网页上(见下页的图),从而使得javascript借助这个api类可以干出比较有意义的事情。qXMLHttpRequest对象在网络上的俗称为XHR对象。l什么是AjaxAjax的概念:6Ajax的特点的特点nAjax的特点:q浏览器中显示一个页面后,这个页面以后一直不改变,所有的操作请求都由这个网页中的javascript代码发出,所有的结果都由javascript代码接受并增加到这个页面上,浏览器窗口中显示的网页始终都是初始的那个网页。(见下面两页的图)q增强用户体验:可以在用户浏览网页的同时与服务器进行异步交互和实现网页内容的局部更新,例如,126邮箱密码安全性判断和googlesuggest;可以按需取数据,改善页面显示速度,例如,树状菜单和babasport的首页(整合多个信息的页面);视觉流畅的定时刷新,例如,聊天室。(用下几页的图举例说明)q学习ajax和应用ajax的难点不在于XMLHttpRequest本身,而在于javascript和DOM编程,没有较好的javascript和DOM编程基础,你就很难做出有意义的ajax应用。lAjax的特点Ajax的特点:7浏览器的普通交互方式l浏览器的普通交互方式8Ajax的交互方式lAjax的交互方式9同步交互和异步交互同步交互和异步交互举个例子:普通举个例子:普通B/S模式模式(同步同步)AJAX技术技术(异步异步)*同步:提交请求-等待服务器处理-处理完毕返回这个期间客户端浏览器不能干任何事*异步:请求通过事件触发-服务器处理(这时浏览器仍然可以作其他事情)-处理完毕同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式易懂的理解易懂的理解:异步传输异步传输:你传输吧,我去做我的事了,传输完了告诉我一声你传输吧,我去做我的事了,传输完了告诉我一声同步传输同步传输:你现在传输,我要亲眼看你传输完成,才去做别的事你现在传输,我要亲眼看你传输完成,才去做别的事l同步交互和异步交互举个例子:普通B/S模式(同步)10AJAX案例之google suggest lAJAX案例之googlesuggest11AJAX案例之Google MapslAJAX案例之GoogleMaps12Ajax的应用场景:财富通网吧充值界面lAjax的应用场景:财富通网吧充值界面13成都传智播客Ajax的应用场景:密码安全性检测l成都传智播客Ajax的应用场景:密14Ajax的应用场景:RIA应用lAjax的应用场景:RIA应用15Ajax的应用场景:邮箱系统lAjax的应用场景:邮箱系统16Ajax的应用场景:蓝源批发零售业连锁管理系统lAjax的应用场景:蓝源批发零售业连锁管理系统17究竟什么是究竟什么是AjaxnAjax:一种不用刷新整个页面便可与服务器通讯的办法不用刷新整个页面便可与服务器通讯的办法图1 Web的传统模型。客户端向服务器发送一个请求,服务器返回整个页面,如此反复图2 在Ajax模型中,数据在客户端与数据在客户端与服务器之间独立传输。服务器不再返服务器之间独立传输。服务器不再返回整个页面回整个页面l究竟什么是AjaxAjax:一种不用刷新整个页面便可与服务器18Ajax的实现方式的实现方式n不用刷新整个页面便可与服务器通讯的办法:qFlashqJavaappletq框架:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动整个页面q隐藏的iframeqXMLHttpRequest:该对象是对JavaScript的一个扩展,可使网页与服务器进行通信。是创建Ajax应用的最佳选择。实际上通常把实际上通常把Ajax当成当成XMLHttpRequest对象的代名词对象的代名词lAjax的实现方式不用刷新整个页面便可与服务器通讯的办法:19Ajax的工作原理的工作原理nAjax的核心是JavaScript对象XmlHttpRequest。该对象在InternetExplorer5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。lAjax的工作原理Ajax的核心是JavaScript对象X20Ajax的工作原理的工作原理nAJAX采用异步交互过程。AJAX在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中的处理等待处理等待缺点。n用户的浏览器在执行任务时即装载了用户的浏览器在执行任务时即装载了AJAX引擎。引擎。AJAX引擎用引擎用JavaScript语语言编写,通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间言编写,通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间的交互。的交互。nAJAX引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络服务器间的交流络服务器间的交流。现在,可以用Javascript调用AJAX引擎来代替产生一个HTTP的用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交给AJAX来执行。n使用AJAX,可以为JSP、开发人员、终端用户带来可见的便捷:用户界面AJAX引擎服务器用户界面服务器lAjax的工作原理AJAX采用异步交互过程。AJAX在用户与21AJAX包含的技术包含的技术AJAX:(AsynchronousJavaScriptandXML)并不是一项新技术并不是一项新技术,其实是多种技术的综合,包括Javascript、XHTML和CSS、DOM、XML和XMLHttpRequest.q服务器端语言服务器端语言:服务器需要具备向浏览器发送特定信息的能力。AjaxAjax与服务器端语言无关与服务器端语言无关。qXMLXML(eXtensible Markup Language,可扩展标记语言)是一种描述数据的格式。AJAX AJAX 程序需要某种格式化的格式来在服务器和客户端程序需要某种格式化的格式来在服务器和客户端之间传递信息,之间传递信息,XML XML 是其中的一种选择是其中的一种选择qXHTMLXHTML(eXtended Hypertext Markup Language,使用扩展超媒体标记语言)和 CSSCSS(Cascading Style Sheet,级联样式单)标准化呈标准化呈现;现;qDOMDOM(Document Object Model,文档对象模型)实现动态显示和交互;实现动态显示和交互;q使用XMLHTTP组件XMLHttpRequestXMLHttpRequest对象对象进行异步数据读取异步数据读取q使用JavaScriptJavaScript绑定和处理所有数据绑定和处理所有数据lAJAX包含的技术AJAX:(Asynchron22AJAX的缺陷的缺陷AJAX不是完美的技术。也存在缺陷不是完美的技术。也存在缺陷:1AJAX大量使用了Javascript和AJAX引擎,而这个取决于浏览器的支持。IE5.0及以上、Mozilla1.0、NetScape7及以上版本才支持,Mozilla虽然也支持AJAX,但是提供XMLHttpRequest的方式不一样。所以,使用AJAX的程序必须测试针对各个浏览器的兼容性。2AJAX更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的;有的用户还经常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。3对流媒体的支持没有FLASH、JavaApplet好。4一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax。lAJAX的缺陷AJAX不是完美的技术。也存在缺陷:23XMLHttpRequest对象对象nXMLHttpRequest对象对象XMLHttpRequest是XMLHTTP组件的对象,通过这个对象,AJAX可以像桌面应用程序一样只同服务器进行数据层面的交换,而不用每次都刷新界面,也不用每次将数据处理的工作都交给服务器来做;这样既减轻了服务器负担又加快了响应速度、缩短了用户等待的时间。nXMLHttpRequest最早是在IE5中以ActiveX组件的形式实现的。非W3C标准.n创建XMLHttpRequest对象(由于非标准所以实现方法不统一由于非标准所以实现方法不统一)qInternetExplorer把XMLHttpRequest实现为一个ActiveX对象q其他浏览器(Firefox、Safari、Opera)把它实现为一个本地的JavaScript对象。qXMLHttpRequest在不同浏览器上的实现是兼容的在不同浏览器上的实现是兼容的,所以可以用同样的方式访问XMLHttpRequest实例的属性和方法,而不论这个实例创建的方法是什么。lXMLHttpRequest对象XMLHttpRequest24XMLHttpRequest对象初始化对象初始化nfunctioncreateXmlHttpRequest()var xmlhttp=null;try/Firefox,Opera8.0+,Safarixmlhttp=newXMLHttpRequest();catch(e)/IEIE7.0以下的浏览器以以下的浏览器以ActiveX组件的方式来创建组件的方式来创建XMLHttpRequest对象对象var MSXML=MSXML2.XMLHTTP.6.0,MSXML2.XMLHTTP.5.0,MSXML2.XMLHTTP.4.0,MSXML2.XMLHTTP.3.0,MSXML2.XMLHTTP,Microsoft.XMLHTTP;for(var n=0;n MSXML.length;n+)try xmlhttp=new ActiveXObject(MSXMLn);break;catch(e)return xmlhttp;lXMLHttpRequest对象初始化function25XMLHttpRequest对象方法对象方法方法方法描述描述abort()停止当前请求停止当前请求getAllResponseHeaders()把把http请求的所有响应首部作为键请求的所有响应首部作为键/值对返回值对返回getResponseHeader(headerLabel)返回指定首部的串值返回指定首部的串值open(“method”,”url”)建立对服务器的调用,建立对服务器的调用,method参数可以是参数可以是GET,POST。url参数参数可以是相对可以是相对URL或绝对或绝对URL。这个方法还包括。这个方法还包括3个可选参数。个可选参数。send(content)向服务器发送请求向服务器发送请求setRequestHeader(label,value)把指定首部设置为所提供的值。在设置任何首部之前必须先调把指定首部设置为所提供的值。在设置任何首部之前必须先调用用open()lXMLHttpRequest对象方法方法描述abort(26XMLHttpRequest对象属性对象属性lXMLHttpRequest对象属性27发送请求发送请求-方法和属性介绍方法和属性介绍n利用XMLHttpRequest实例与服务器进行通信包含以下3个关键部分:qonreadystatechange事件处理函数qopen方法qsend方法l发送请求-方法和属性介绍利用XMLHttpRequest28发送请求发送请求-方法和属性介绍方法和属性介绍nonreadystatechange:q该事件处理函数由服务器触发,而不是用户该事件处理函数由服务器触发,而不是用户q在Ajax执行过程中,服务器会通知客户端当前的通信状态。这依靠更新XMLHttpRequest对象的readyState来实现。改变改变readyState属性是服务器对客户端连接操作的一种方式。属性是服务器对客户端连接操作的一种方式。q每次每次readyState属性的改变都会触发属性的改变都会触发readystatechange事件事件l发送请求-方法和属性介绍onreadystatechang29发送请求发送请求-方法和属性介绍方法和属性介绍nopen(method,url,asynch)qXMLHttpRequest对象的对象的open方法允许程序员用一个方法允许程序员用一个Ajax调用向服务器发送请调用向服务器发送请求求。qmethod:请求类型,类似:请求类型,类似“GET”或或”POST”的字符串。若只想从服务器检索一的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用个文件,而不需要发送任何数据,使用GET(可以在可以在GET请求里通过附加在请求里通过附加在URL上的查询字符串来发送数据,不过数据大小限制为上的查询字符串来发送数据,不过数据大小限制为2000个字符个字符)。若需要向服务。若需要向服务器发送数据,用器发送数据,用POST。q在某些情况下,有些浏览器会把多个在某些情况下,有些浏览器会把多个XMLHttpRequest请求的结果缓存在同一个请求的结果缓存在同一个URL。如果对每个请求的响应不同,这就会带来不好的结果。把当前时间戳追加。如果对每个请求的响应不同,这就会带来不好的结果。把当前时间戳追加到到URL的最后,就能确保的最后,就能确保URL的惟一性,从而避免浏览器缓存结果的惟一性,从而避免浏览器缓存结果。qurl:路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对:路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。路径。qasynch:表示请求是否要异步传输,默认值为:表示请求是否要异步传输,默认值为true(异步异步)。指定。指定true,在读取后,在读取后面的脚本之前,不需要等待服务器的相应。指定面的脚本之前,不需要等待服务器的相应。指定false,当脚本处理过程经过这点,当脚本处理过程经过这点时,会停下来,一直等到时,会停下来,一直等到Ajax请求执行完毕再继续执行请求执行完毕再继续执行。lvarurl=GetAndPostExample?timeStamp=+newDate().getTime();l发送请求-方法和属性介绍open(method,url,30发送请求发送请求-方法和属性介绍方法和属性介绍nsend(data):qopen方法定义了Ajax请求的一些细节。send方法可为已经待命的请求发送指令方法可为已经待命的请求发送指令qdata:将要传递给服务器的字符串。q若选用的是若选用的是GET请求,则不会发送任何数据,请求,则不会发送任何数据,给给send方法传递方法传递null即可即可:request.send(null);q当向send()方法提供参数时,要确保open()中指定的方法是POST,如果没有数据作为请求体的一部分发送,则使用null.q完整的完整的Ajax的的GET请求示例:请求示例:使用get请求时send方法参数时null,如果传值的话,服务器也接受不到l发送请求-方法和属性介绍send(data):使用get请31发送请求发送请求-方法和属性介绍方法和属性介绍nsetRequestHeader(header,value)q当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是首部信息用来声明一个请求是GET还是还是POST。qAjax请求中,发送首部信息的工作可以由setRequestHeader完成q参数header:首部的名字;参数value:首部的值。q如果用如果用POST请求向服务器发送数据,需要将请求向服务器发送数据,需要将“Content-type”的首部设置为的首部设置为“application/x-www-form-urlencoded”.它会告知服务器正在发送数据,并且数据已经它会告知服务器正在发送数据,并且数据已经符合符合URL编码了。编码了。q该方法必须在该方法必须在open()之后才能调用之后才能调用q完整的完整的Ajax的的POST请求示例:请求示例:l发送请求-方法和属性介绍setRequestHeader(32接收接收-方法和属性介绍方法和属性介绍n用XMLHttpRequest的方法可向服务器发送请求。在Ajax处理过程中,XMLHttpRequest的如下属性可被服务器更改:qreadyStateqstatusqresponseTextqresponseXMLl接收-方法和属性介绍用XMLHttpRequest的方33接收接收-方法和属性介绍方法和属性介绍nreadyStateqreadyState属性表示表示Ajax请求的当前状态请求的当前状态。它的值用数字代表。n0代表未初始化。还没有调用open方法n1代表正在加载。open方法已被调用,但send方法还没有被调用n2代表已加载完毕。send已被调用。请求已经开始n3代表交互中。服务器正在发送响应n4代表完成。响应发送完毕代表完成。响应发送完毕q每次每次readyState值的改变,都会触发值的改变,都会触发readystatechange事件事件。如果把onreadystatechange事件处理函数赋给一个函数,那么每次readyState值的改变都会引发该函数的执行。qreadyState值的变化会因浏览器的不同而有所差异。但是,当请但是,当请求结束的时候,每个浏览器都会把求结束的时候,每个浏览器都会把readyState的值统一设为的值统一设为4l接收-方法和属性介绍readyState34接收接收-方法和属性介绍方法和属性介绍nstatusq服务器发送的每一个响应也都带有首部信息。三位数的状态码是服务器发送的响应中最重要的首部信息,并且属于超文本传输协议中的一部分。q常用状态码及其含义:n404没找到页面(notfound)n403禁止访问(forbidden)n500内部服务器出错(internalserviceerror)n200一切正常(ok)n304没有被修改(notmodified)(服务器返回304状态,表示源文件没有被修改)q在在XMLHttpRequest对象中,服务器发送的状态码都保存在对象中,服务器发送的状态码都保存在status属性里。通过把这个值和属性里。通过把这个值和200或或304比较,可以确保比较,可以确保服务器是否已发送了一个成功的响应服务器是否已发送了一个成功的响应l接收-方法和属性介绍status35接收接收-方法和属性介绍方法和属性介绍nresponseTextqXMLHttpRequest的responseText属性包含了从服务器发送的数据包含了从服务器发送的数据。它是一个HTML,XML或普通文本,这取决于服务器发送的内容。q当readyState属性值变成4时,responseText属性才可用,表明Ajax请求已经结束。l接收-方法和属性介绍responseText36接收接收-方法和属性介绍方法和属性介绍nresponseXMLq如果服务器返回的是如果服务器返回的是XML,那么数据将储存在那么数据将储存在responseXML属性属性中。中。q只用服务器发送了带有正确首部信息的数据时,只用服务器发送了带有正确首部信息的数据时,responseXML属属性才是可用的。性才是可用的。MIME类型必须为类型必须为text/xmll接收-方法和属性介绍responseXML37成都传智播客AJAX开发框架开发框架AJAX实质上也是遵循Request/Server模式,所以这个框架基本的流程是:n对象初始化n发送请求n服务器接收n服务器返回n客户端接收n修改客户端页面内容。只不过这个过程是异步的。l成都传智播客AJAX开发框架AJA38A、初始化初始化XMLHttpRequest对象对象nfunctioncreateXmlHttpRequest()var xmlhttp=null;try/Firefox,Opera8.0+,Safarixmlhttp=newXMLHttpRequest();catch(e)/IEIE7.0以下的浏览器以以下的浏览器以ActiveX组件的方式来创建组件的方式来创建XMLHttpRequest对象对象var MSXML=MSXML2.XMLHTTP.6.0,MSXML2.XMLHTTP.5.0,MSXML2.XMLHTTP.4.0,MSXML2.XMLHTTP.3.0,MSXML2.XMLHTTP,Microsoft.XMLHTTP;for(var n=0;n MSXML.length;n+)try xmlhttp=new ActiveXObject(MSXMLn);break;catch(e)return xmlhttp;lA、初始化XMLHttpRequest对象function39B、指定响应处理函数指定响应处理函数n指定当服务器返回信息时客户端的处理方式。只要将相应的处理函指定当服务器返回信息时客户端的处理方式。只要将相应的处理函数名称赋给数名称赋给XMLHttpRequest对象的对象的onreadystatechange属性就属性就可以了可以了.比如:比如:XMLHttpReq.onreadystatechange=processResponse;n注意注意:这个函数名称不加括号,不指定参数。也可以用这个函数名称不加括号,不指定参数。也可以用Javascript函函数直接量方式定义响应函数。比如:数直接量方式定义响应函数。比如:XMLHttpReq.onreadystatechange=function();/处理返回信息的函数functionprocessResponse()lB、指定响应处理函数指定当服务器返回信息时客户端的处理方式。40C、发出发出HTTP请求请求n向服务器发出向服务器发出HTTP请求了。这一步调用请求了。这一步调用XMLHttpRequest对象的对象的open和和send方法。方法。http_request.open(GET,http:/www.example.org/some.file,true);http_request.send(null)n按照顺序,按照顺序,open调用完毕之后要调用调用完毕之后要调用send方法。方法。send的参数如果是的参数如果是以以Post方式发出的话,可以是任何想传给服务器的内容。方式发出的话,可以是任何想传给服务器的内容。n注意:如果要传文件或者Post内容给服务器,必须先调用setRequestHeader方法,修改MIME类别。如下:nhttp_request.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);这时资料则以查询字符串的形式列出,作为send的参数,例如:name=value&anothername=othervalue&so=onlC、发出HTTP请求向服务器发出HTTP请求了。这一步调用X41发出发出Http请求的代码请求的代码/发送请求functionsendRequest()/获取文本框的值varchatMsg=input.value;varurl=chatServlet.do?charMsg=+chatMsg;/建立对服务器的调用XMLHttpReq.open(POST,url,true);/设置MiME类别,如果用POST请求向服务器发送数据,/需要将Content-type的首部设置为application/x-www-form-urlencoded./它会告知服务器正在发送数据,并且数据已经符合URL编码了。XMLHttpReq.setRequestHeader(Content-Type,application/x-www-form-urlencoded);/状态改变的事件触发器,客户端的状态改变会触发readystatechange事件,/onreadystatechange会调用相应的事件处理函数XMLHttpReq.onreadystatechange=processResponse;/发送数据XMLHttpReq.send(null);l发出Http请求的代码/发送请求42D、处理服务器返回的信息处理服务器返回的信息处理响应处理函数都应该做什么。处理响应处理函数都应该做什么。首先,它要检查首先,它要检查XMLHttpRequest对象的对象的readyState值,判断请求目前的状态。参照前值,判断请求目前的状态。参照前文的属性表可以知道,文的属性表可以知道,readyState值为值为4的时候,代表服务器已经传回所有的信息,可的时候,代表服务器已经传回所有的信息,可以开始处理信息并更新页面内容了。如下:以开始处理信息并更新页面内容了。如下:if(http_request.readyState=4)/信息已经返回,可以开始处理信息已经返回,可以开始处理else/信息还没有返回,等待信息还没有返回,等待服务器返回信息后,还需要判断返回的服务器返回信息后,还需要判断返回的HTTP状态码,确定返回的页面没有错误。所有状态码,确定返回的页面没有错误。所有的状态码都可以在的状态码都可以在W3C的官方网站上查到。其中,的官方网站上查到。其中,200代表页面正常。代表页面正常。if(http_request.status=200)/页面正常,可以开始处理信息页面正常,可以开始处理信息else/页面有问题页面有问题lD、处理服务器返回的信息处理响应处理函数都应该做什么。43D、处理服务器返回的信息处理服务器返回的信息nXMLHttpRequest对成功返回的信息有两种处理方式:nresponseText:将传回的信息当字符串使用;nresponseXML:将传回的信息当XML文档使用,可以用DOM处理。/处理返回信息的函数functionprocessResponse()if(XMLHttpReq.readyState=4)/判断对象状态4代表完成if(XMLHttpReq.status=200)/信息已经成功返回,开始处理信息document.getElementById(chatArea).value=XMLHttpReq.responseText;lD、处理服务器返回的信息XMLHttpRequest对成功返44数据格式摘要n在服务器端AJAX是一门与语言无关的技术。在业务逻辑层使用何种服务器端语言都可以。n从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送。服务器端的编程语言一般以如下3种格式返回数据:qXMLqJSONqHTMLl数据格式摘要在服务器端AJAX是一门与语言无关的技术。在45XML格式n优点:qXML是一种通用的数据格式。q不必把数据强加到已定义好的格式中,而是要为数据自定义合适的标记。q利用DOM可以完全掌控文档。n缺点:q如果文档来自于服务器,就必须得保证文档含有正确的首部信息。若文档类型不正确,那么responseXML的值将是空的。q当浏览器接收到长的XML文件后,DOM解析可能会很复杂lXML格式优点:46JSON格式nJSON(JavaScriptObjectNotation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。nJSON的规则很简单:对象是一个无序的对象是一个无序的“名称名称/值值对对”集合。一个对象以集合。一个对象以“”(左(左括号)开始,括号)开始,“”(右括号)结束。每个(右括号)结束。每个“名称名称”后跟一个后跟一个“:”(冒号);(冒号);“名称名称/值值对对”之间使用之间使用“,”(逗号)分隔(逗号)分隔。规则如下规则如下:1)映射用冒号(“:”)表示。名称:值2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值23)映射的集合(对象)用大括号(“”)表示。名称1:值1,名称2:值24)并列数据的集合(数组)用方括号(“”)表示。名称1:值,名称2:值2,名称1:值,名称2:值25元素值可具有的类型:string,number,object,array,true,false,nulllJSON格式JSON(JavaScriptObject47JSON 示例nJSON用冒号用冒号(而不是等号而不是等号)来赋值。每一条赋值语句用逗号分开。整个对象用大来赋值。每一条赋值语句用逗号分开。整个对象用大括号封装起来。可用大括号分级嵌套数据。括号封装起来。可用大括号分级嵌套数据。n对象描述中存储的数据可以是字符串,数字或者布尔值。对象描述也可存储函对象描述中存储的数据可以是字符串,数字或者布尔值。对象描述也可存储函数,那就是对象的方法。数,那就是对象的方法。lJSON示例JSON用冒号(而不是等号)来赋值。每一条赋48解析JSONnJSON只是一种文本字符串。它被存储在responseText属性中n为了读取存储在responseText属性中的JSON数据,需要根据JavaScript的eval语句。函数函数eval会把一个字符串当作它的参数会把一个字符串当作它的参数。然后这个字符串会被当作然后这个字符串会被当作JavaScript代码来执行。因为代码来执行。因为JSON的的字符串就是由字符串就是由JavaScript代码构成的,所以它本身是可执行的代码构成的,所以它本身是可执行的n代码实例:l解析JSONJSON只是一种文本字符串。它被存储在res49处理JSON例子一例子一:varpeople=firstName:Brett,lastName:McLaughlin,email:brettnewI;alert(people.firstName);alert(people.lastName);alert(people.email);l处理JSON例子一:50处理JSON例子二例子二:varpeople=firstName:Brett,email:brettnewI,firstName:Mary,email:marynewI;alert(people0.firstName);alert(people0.email);alert(people1.firstName);alert(people1.email);l处理JSON例子二:51处理JSON例子三例子三:varpeople=programmers:firstName:Brett,email:brettnewI,firstName:Jason,email:;window.alert(people.programmers0.firstName);window.alert(people.programmers1.email);l处理JSON例子三:52处理JSON例子四例子四:varpeople=programmers:firstName:Brett,email:brettnewI,firstName:Jason,email:,firstName:Elliotte,lastName:Harold,email:,authors:firstName:Isaac,genre:sciencefiction,firstName:Tad,genre:fantasy,firstName:Frank,genre:christianfiction,musicians:firstName:Eric,instrument:guitar,firstName:Sergei,instrument:piano;window.alert(people.programmers1.firstName);window.alert(people.musicians1.instrument);l处理JSON例子四:53处理JSON例子五例子五varpeople=username:mary,age:20,info:tel:1234566,celltelphone:788666,address:city:beijing,code:1000022,city:shanghai,code:2210444;window.alert(people.username);window.alert(people.info.tel);window.alert(people.address0.city);l处理JSON例子五54JSON 小结n优点:q作为一种数据传输格式,JSON与XML很相似,但是它更加灵巧。qJSON不需要从服务器端发送含有特定内容类型的首部信息。n缺点:q语法过于严谨q代码不易读qeval函数存在风险lJSON小结优点:55解析 HTMLnHTML由一些普通文本组成。如果服务器通过XMLHttpRequest发送HTML,文本将存储在responseText属性中。n不必从responseText属性中读取数据。它已经是希望的格式,可以直接将它插入到页面中。n插入HTML代码最简单的方法是更新这个元素的innerHTML属性。l解析HTMLHTML由一些普通文本组成。如果服务器通过56HTML 小结n优点:q从服务器端发送的HTML代码在浏览器端不需要用JavaScript进行解析。qHTML的可读性好。qHTML代码块与innerHTML属性搭配,效率高。n缺点:q若需要通过AJAX更新一篇文档的多个部分,HTML不合适qinnerHTML并非DOM标准。lHTML小结优点:57对比小结n若应用程序不需要与其他应用程序共享数据的时候不需要与其他应用程序共享数据的时候,使用HTML片段来返回数据时最简单的n如果数据需要重用如果数据需要重用,JSON文件是个不错的选择,其在性能和文件大小方面有优势n当远程应用程序未知时当远程应用程序未知时,XML文档是首选,因为XML是web服务领域的“世界语”l对比小结若应用程序不需要与其他应用程序共享数据的时候,使用58案例:省份与城市的联动下拉列表框n效果演示。l案例:省份与城市的联动下拉列表框效果演示。59联动下拉:纯静态数据的html方式n实验步骤:q演示程序运行的效果。q编写一个静态province.html页面,其中使用一个二维数组来装载所有数据,然后分析和编码实现省份与城市的联动下拉列表框。q编写一个静态jsonProvince.html页面,其中使用JSON对象方式来装载所有数据,然后分析和编码实现此种数据格式下的省份与城市的联动下拉列表框。l联动下拉:纯静态数据的html方式实验步骤:60联动下拉:动态生成数据的方式n实验步骤:q编写一个ListProvinceAction的Action和相应的province.jsp页面,留出数据待填充,大家清晰看到后面的任务就是生成出数据。q创建代表省份与城市的province和City实体类,然后将相应的实体对象存放在一个单例的MemoryDao中,用一个ArrayList集合存储所有Province对象,Province对象中保存有一个City对象的集合,在MemoryDao中构建出各个对象及关系。q创建ProvinceService类获取所有省份列表和CityService类获取某个省份下的所有城市。q在ListProvinceAction中编写拼凑出JSP页面所需要的那个数组字符串。q编写一个ListJsonProvinceAction的Action和相应的jsonProvince.jsp页面,以生成使用JSON对象来装载所有数据,为了方便拼凑JSON格式的字符串,在各个实体对象中覆盖toString方法返回自身的JSON格式字符串,这要比在外面最后统一转换成一个JSON字符串的做法要优雅很多,这种分而治之的思想使得程序健壮且易于维护。q编写一个ListJsonProvince2Action的Action,快速演示和说明一下如何在其内部用JSONObject与JSONArray工具里来完成json字符串的生成工作。l联动下拉:动态生成数据的方式实验步骤:61联动下拉:用Ajax方式实现的思路分析n传统方式与Ajax实现方式的对比与选择:q好比饭馆上菜的方式:一种是先让用户等较长时间,最后一下子将所有的菜全部上上来,一般的火锅店都是这么做的,还有一种方式就是做好一盘菜就上一盘菜,用户等待的时间较短,但送餐服务员要跑好多次,一般的家常菜饭店都是这么做的。q如何选择:传统方式是一下子把所有数据搞到手,以后只是用js把到手的数据显示出来即可,第一次得到数据的时间比较长,如果这个时间长得影响了用户的感受,那就考虑用ajax进行改进,否则,可以直接使用传统方式。q如果将传统方式改造为ajax方式的总结:将原有的一个jsp页面改为两个jsp页面来实现,第一个页面为那些固定不变的内容和javascript代码,第二个页面为那些要改变的区域的代码,因此原来用一个action或servlet实现的代码要改变为用两个action或servlet来实现,这称为二步视图法二步视图法。n实现的思路剖析:q第一次要获得一个页面,浏览器以后一直显示这个页面,以后的每个操作都触发这个页面内部的一个javascript函数,再由这个javascript函数去发请求和处理回应结果。q第一次获得的页面应该包含什么信息?页面的初始内容和javascript函数。q以后的每次请求要获得什么样的结果?l联动下拉:用Ajax方式实现的思路分析传统方式与Ajax实现62联动下拉:用json数据传输格式的Ajax方式实现n步骤:q编写AjaxListProvince的Action和ajaxProvince.jsp页面,在一个下拉列表框中列出所有省份,编写触发和发送获取某个省份下面的城市的请求消息的代码,先简单的alert一下响应结果。q根据客户端的请求信息,分析和编写一个ListCities的Action调用CityService类获取某个省份下的所有城市,Action返回一个包含有某个省份下的所有City的json格式的数组。q在ajaxProvince.jsp页面中编写处理返回结果的javascript代码,使用javascript自己的eval方法处理json字符串。q改进为用prototype自己的json支持来处理返回的json串,包括扩展的String.evalJSON()方法和transport.responseJSON属性这两种方式。q由于本例子程序返回的城市对象很简单,可以使用一个map来表示某个省份下的所有City信息,同时简化客户端的javascript代码。l联动下拉:用json数据传输格式的Ajax方式实现步骤:63联动下拉:用xml数据传输格式的Ajax方式实现n步骤:q编写一个ListCity2的Action,返回一个包含有某个省份下的所有City的xml文档。q直接用浏览器访问ListCity2,测试查看返回的xml文档内容是否正确。q客户端页面改为ajaxProvince2.jsp,在其中编写解析xml文档内容和将结果显示在下拉列表框中的代码,并且将AjaxListProvince配置为/AjaxListProvince2.dol联动下拉:用xml数据传输格式的Ajax方式实现步骤:64联动下拉:返回整个下拉列表框的HTML代码n步骤:q编写一个ListCity3的Action,返回一个包含有某个省份下的所有City的下拉列表框的html代码。q直接用浏览器访问ListCity3,测试查看返回的html代码是否正确。q客户端页面改为AjaxProvince3.jsp和在其中定义一个元素来容纳服务器返回的下拉列表框,并且将AjaxListProvince配置为/AjaxListProvince3.do。l联动下拉:返回整个下拉列表框的HTML代码步骤:65联动下拉:返回向下拉列表框填充选项的js代码n步骤:q编写一个ListCity4的Action,返回一个用于将某个省份下的所有City添加进下拉列表框的javascript代码。q直接用浏览器访问ListCity4,测试查看返回的javascript代码是否正确。q客户端页面改为AjaxProvince4.jsp和使用eval方法执行服务器端返回的javascript代码,并且将AjaxListProvince配置为/AjaxListProvince4.do。l联动下拉:返回向下拉列表框填充选项的js代码步骤:66案例扩展:多级地区的动态展现n实验步骤:q演示和分析程序运行的效果。(每选择一个区域,则显示一个包含有其所有子区域的下拉列表框,并清除其他不相关的下拉列表框;当选择了某个没有子区域的选项后,不再显示出新的下拉列表框,而是显示该区域的网吧)q分析数据库表结构该如何设计,并执行预备的脚本文件创建表结构和数据。q分析JSP页面该如何设计:n第一个返回的页面应该包含哪些内容?n以后每次请求获得的结果是什么?返回的结果怎样展现在返回的第一个页面中?动态生成出下拉列表框和将下拉列表框追加到其他列表框后面,或者提前预定义若干span元素,将新增的下拉列表框添加到相应的span元素中。如果要实现用表格来显示某个区域的网吧,服务器端返回的要么是select元素,要么是table元素,客户端要判断结果的类型。q编码实现:先用span的方式实现;再用prototype的删除和添加功能。l案例扩展:多级地区的动态展现实验步骤:67
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!