WEB2.0中AJAX应用的详细探讨.doc_第1页
WEB2.0中AJAX应用的详细探讨.doc_第2页
WEB2.0中AJAX应用的详细探讨.doc_第3页
WEB2.0中AJAX应用的详细探讨.doc_第4页
WEB2.0中AJAX应用的详细探讨.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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.0xmlhttp_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- )tryif( i = 2 )xmlhttp_request = new ActiveXObject( Microsoft.XMLHTTP );elsexmlhttp_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函数如下:在区域建立一个文本框,id为163id再建一个id为messsge的空白区域用来显示返回字符串(也可以通过Javascript函数截取一部分字符串显示):这样,一个基于AJAX技术的用户名检测页面就做好了,不过这个页面将返回服务器响应生成页面的所有字符串,当然还可以对返回的字符串进行一些操作,便于应用到不同的需要当中。实例二: 以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在在上面的例子中,当服务器对HTTP请求的响应被收到后,我们会调用请求对象的reponseText属性。该属性包含了服务器返回响应文件的内容。现在我们以XMLDocument对象方式返回响应,此时将不再需要reponseText属性而使用responseXML属性。首先登陆金山通行证注册页面,我们发现金山通行证用户名的检测方式为:/ksgweb/jsp/login/uid.jsp?uid=用户名,并且返回XML数据:isExistedUid-2当result值为-1时表示此用户名已被注册,当result值为-2时表示此用户名尚未注册,因此通过对result值的判断可以知道用户名是否被注册。对上例代码进行修改:首先找到 document.getElementById(message).innerHTML = xmlhttp_request.responseText; 改为: var response = xmlhttp_request.responseXML.documentElement; var result = response.getElementsByTagName(result)0.firstChild.data;/返回result节点数据if(result =-2)document.getElementById(message).innerHTML = 用户名+document.getElementById(163id).value+尚未注册;else if(result =-1)document.getElementById(message).innerHTML = 对不起,用户名+document.getElementById(163id).value+已经注册; 通过以上两个实例说明了AJAX的客户端基础应用,采用的是网易和金山现成的服务器端程序,当然为了开发合适自己页面的程序,还需要对自己编写服务器端程序,这设计到程序语言及数据库的操作,对于有一定程序基础的读者一定不是很难的事情,本文着重讨论了客户端AJAX的应用体验,广大读者可以根据本文讲的原理结合各种样式表现手法作出绚丽多彩的应用,希望本文能够起到抛砖引玉的作用。附录(一) HTTP 1.1支持的状态代码100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议200 OK 一切正常,对GET和POST请求的应答文档跟在后面。201 Created 服务器已经创建了文档,Location头给出了它的URL。202 Accepted 已经接受请求,但处理尚未完成。203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取307 Temporary Redirect 和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。400 Bad Request 请求出现语法错误。401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。403 Forbidden 资源不可用。404 Not Found 无法找到指定位置的资源405 Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。406 Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容407 Proxy Authentication Required 类似于401,表示客户必须先经过代理服务器的授权。408 Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。410 Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。412 Precondition Failed 请求头中指定的一些前提条件失败413 Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头414 Request URI Too Long URI太长416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求501 Not Implemented 服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答503 Serv

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论