已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ajax技术原理及工作原理简介ajax技术原理及工作原理简介 AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。主要包含了以下几种技术Ajax(Asynchronous JavaScript + XML)的定义基于web标准(standards-based presentation)XHTML+CSS的表示; 使用 DOM(Document Object Model)进行动态显示及交互; 使用 XML 和 XSLT 进行数据交换及相关操作; 使用 XMLHttpRequest 进行异步数据查询、检索; 使用 JavaScript 将所有的东西绑定在一起。英文参见Ajax的提出者Jesse James Garrett的原文。类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX的“派生/合成”式(derivative/composite)的技术正在出现,如“AFLAX”。 AJAX的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括:Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。与传统的web应用比较传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然後返回一个新的网页。这个做法浪费了许多带宽,因为在前後两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。 与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。Ajax应用程序的优势在于:1. 通过异步模式,提升了用户体验2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。Ajax的工作原理Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。在创建Web站点时,在客户端执行屏幕更新为用户提供了很大的灵活性。下面是使用Ajax可以完成的功能: 动态更新购物车的物品总数,无需用户单击Update并等待服务器重新发送整个页面。 提升站点的性能,这是通过减少从服务器下载的数据量而实现的。例如,在某购物车页面,当更新篮子中的一项物品的数量时,会重新载入整个页面,这必须下载整个页面的数据。如果使用Ajax计算新的总量,服务器只会返回新的总量值,因此所需的带宽仅为原来的百分之一。 消除了每次用户输入时的页面刷新。例如,在Ajax中,如果用户在分页列表上单击Next,则服务器数据只刷新列表而不是整个页面。 直接编辑表格数据,而不是要求用户导航到新的页面来编辑数据。对于Ajax,当用户单击Edit时,可以将静态表格刷新为内容可编辑的表格。用户单击Done之后,就可以发出一个Ajax请求来更新服务器,并刷新表格,使其包含静态、只读的数据。一切皆有可能!但愿它能够激发您开始开发自己的基于Ajax的站点。然而,在开始之前,让我们介绍一个现有的Web站点,它遵循传统的提交/等待/重新显示的范例,我们还将讨论Ajax如何提升用户体验。Ajax的工作原理相当于在用户和服务器之间加了个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的。我们以两个验证通行证帐号是否存在的例子来讲述AJAX在实际中的应用:(1)用文本字符串的方式返回服务器的响应来验证网易通行证帐号是否存在; (2)以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在;首先,我们需要用JavaScript来创建XMLHttpRequest 类向服务器发送一个HTTP请求, XMLHttpRequest 类首先由Internet Explorer以ActiveX对象引入,被称为XMLHTTP。 后来MozillaNetscapeSafari 和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。对于Internet Explorer浏览器,创建XMLHttpRequest 方法如下:xmlhttp_request = new ActiveXObject(Msxml2.XMLHTTP.3.0); /3.0或4.0, 5.0 xmlhttp_request = new ActiveXObject(Msxml2.XMLHTTP); xmlhttp_request = new ActiveXObject(Microsoft.XMLHTTP); 由于在不同Internet Explorer浏览器中XMLHTTP版本可能不一致,为了更好的兼容不同版本的Internet Explorer浏览器,因此我们需要根据不同版本的Internet Explorer浏览器来创建XMLHttpRequest类,上面代码就是根据不同的Internet Explorer浏览器创建XMLHttpRequest类的方法。对于MozillaNetscapeSafari等浏览器,创建XMLHttpRequest 方法如下:xmlhttp_request = new XMLHttpRequest();如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作。 为了解决这个问题,如果服务器响应的header不是text/xml,可以调用其它方法修改该header。xmlhttp_request = new XMLHttpRequest(); xmlhttp_request.overrideMimeType(text/xml); 在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式:try if( window.ActiveXObject ) for( var i = 5; i; i- ) try if( i = 2 ) xmlhttp_request = new ActiveXObject( Microsoft.XMLHTTP ); else xmlhttp_request = new ActiveXObject( Msxml2.XMLHTTP. + i + .0 ); xmlhttp_request.setRequestHeader(Content-Type,text/xml); xmlhttp_request.setRequestHeader(Content-Type,gb2312); break; catch(e) xmlhttp_request = false; else if( window.XMLHttpRequest ) xmlhttp_request = new XMLHttpRequest(); if (xmlhttp_request.overrideMimeType) xmlhttp_request.overrideMimeType(text/xml); catch(e) xmlhttp_request = false; 在定义了如何处理响应后,就要发送请求了。可以调用HTTP请求类的open()和send()方法,如下所示:xmlhttp_request.open(GET, URL, true); xmlhttp_request.send(null); open()的第一个参数是HTTP请求方式GET,POST或任何服务器所支持的您想调用的方式。 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。 第二个参数是请求页面的URL。第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是AJAX中的A。用JavaScript来创建XMLHttpRequest 类向服务器发送一个HTTP请求后,接下来要决定当收到服务器的响应后,需要做什么。这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:xmlhttp_request.onreadystatechange =FunctionName;FunctionName是用JavaScript创建的函数名,注意不要写成FunctionName(),当然我们也可以直接将JavaScript代码创建在onreadystatechange之后,例如:xmlhttp_request.onreadystatechange = function()/ JavaScript代码段;首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest 提供了readyState属性来对服务器响应进行判断。readyState的取值如下: 0 (未初始化) 1 (正在装载) 2 (装载完毕) 3 (交互中) 4 (完成)所以只有当readyState=4时,一个完整的服务器响应已经收到了,函数才可以处理该响应。具体代码如下:if (http_request.readyState = 4) / 收到完整的服务器响应 else / 没有收到完整的服务器响应 当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时,表示状态正常。在检查完请求的状态值和响应的HTTP状态值后,就可以处理从服务器得到的数据了。有两种方式可以得到这些数据:(1) 以文本字符串的方式返回服务器的响应(2) 以XMLDocument对象方式返回响应实例一: 用文本字符串的方式返回服务器的响应来验证网易通行证帐号是否存在首先,我们登陆网易通行证注册页面,可以看到检测用户名是否存在是将用户名提交给checkssn.jsp页面进行判断,格式为:/register/checkssn.jsp?username=用户名 根据上面讲到的方法,我们可以利用AJAX技术对网易通行证用户名进行检测:第一步:新建一个基于Xhtml标准的网页,在区域插入Javascript函数如下:function getXMLRequester( ) var xmlhttp_request = false; try if( window.ActiveXObject ) for( var i = 5; i; i- ) try if( i = 2 ) xmlhttp_request = new ActiveXObject( Microsoft.XMLHTTP ); else xmlhttp_request = new ActiveXObject( Msxml2.XMLHTTP. + i + .0 ); xmlhttp_request.setRequestHeader(Content-Type,text/xml); xmlhttp_request.setRequestHeader(Content-Type,gb2312); break; catch(e) xmlhttp_request = false; else if( window.XMLHttpRequest ) xmlhttp_request = new XMLHttpRequest();if (xmlhttp_request.overrideMimeType) xmlhttp_request.overrideMimeType(text/xml); catch(e) xmlhttp_request = false; return xmlhttp_request ; function IDRequest(n) /定义收到服务器的响应后需要执行的JavaScript函数url=n+document.getElementById(163id).value;/定义网址参数xmlhttp_request=getXMLRequester();/调用创建XMLHttpRequest的函数xmlhttp_request.onreadystatechange = doContents;/调用doContents函数xmlhttp_request.open(GET, url, true); xmlhttp_request.send(null); function doContents() if (xmlhttp_request.readyState = 4) / 收到完整的服务器响应 if (xmlhttp_request.status = 200) /HTTP服务器响应的值OKdocument.getElementById(message).innerHTML = xmlhttp_request.responseText; /将服务器返回的字符串写到页面中ID为message的区域 else alert(http_request.status); 在区域建立一个文本框,id为163id,再建一个id为messsge的空白区域用来显示返回字符串(也可以通过Javascript函数截取一部分字符串显示):这样,一个基于AJAX技术的用户名检测页面就做好了,不过这个页面将返回服务器响应生成页面的所有字符串,当然还可以对返回的字符串进行一些操作,便于应用到不同的需要当中。实例二: 以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在在上面的例子中,当服务器对HTTP请求的响应被收到后,我们会调用请求对象的reponseText属性。该属性包含了服务器返回响应文件的内容。现在我们以XMLDocument对象方式返回响应,此时将不再需要reponseText属性而使用responseXML属性。首先登陆金山通行证注册页面,我们发现金山通行证用户名的检测方式为: pass.kingsoft.co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石河子大学《食品机械与设备》2023-2024学年第一学期期末试卷
- 石河子大学《教育影视赏析》2021-2022学年第一学期期末试卷
- 石河子大学《家畜育种学》2023-2024学年第一学期期末试卷
- 石河子大学《饭店管理》2023-2024学年第一学期期末试卷
- 沈阳理工大学《商业品牌整体策划》2023-2024学年第一学期期末试卷
- 沈阳理工大学《建筑设计》2022-2023学年第一学期期末试卷
- 2018年四川内江中考满分作文《我心中的英雄》8
- 沈阳理工大学《化工安全与环保》2022-2023学年第一学期期末试卷
- 沈阳理工大学《电力变压器设计》2023-2024学年期末试卷
- 沈阳理工大学《产品仿生学应用设计》2021-2022学年第一学期期末试卷
- 军队文职聘用合同管理规定
- 2024年贵州省安顺市西秀区小升初语文试卷
- 2024-2029年中国儿童牙冠行业市场现状分析及竞争格局与投资发展研究报告
- 新时代铁路发展面对面全文内容
- 人工智能与语文阅读理解教学
- 科学素养培育及提升-知到答案、智慧树答案
- 快递主管岗位职责
- 医疗差错、纠纷、事故登记表
- 七年级第一次期中家长会课件
- 2024下半年四川省广元市直属事业单位招聘104人历年公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 市政道路施工工程重难点分析及对策
评论
0/150
提交评论