WEB 2.0中AJAX应用的详细探讨

ajax|web

  最近互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一。AJAX是Asynchronous JavaScript and XML 的缩写。它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括
  

  使用XHTML和CSS标准化呈现;
  
  使用DOM实现动态显示和交互;
  
  使用XML和XSLT进行数据交换与处理;
  
  使用XMLHttpRequest进行异步数据读取;
  
  最后用JavaScript绑定和处理所有数据;
  
  Ajax的工作原理相当于在用户和服务器之间加了?个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的。
  
  我们以两个验证通行证帐号是否存在的例子来讲述AJAX在实际中的应用:
  
  (1)  用文本字符串的方式返回服务器的响应来验证网易通行证帐号是否存在;
  
  (2)  以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在;
  
  首先,我们需要用JavaScript来创建XMLHttpRequest 类向服务器发送一个HTTP请求, XMLHttpRequest 类首先由Internet Explorer以ActiveX对象引入,被称为XMLHTTP。 后来Mozilla?Netscape?Safari 和其他浏览器也提供了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类的方法。
  
  对于Mozilla?Netscape?Safari等浏览器,创建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页面进行判断,格式为:
  
  reg.163.com/register/checkssn.jsp?username=用户名
  
  根据上面讲到的方法,我们可以利用AJAX技术对网易通行证用户名进行检测:
  
  第一步:新建一个基于Xhtml标准的网页,在<head>区域插入Javascript函数如下:
  
  <script type="text/javascript" language="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服务器响应的值OK
  document.getElementById('message').innerHTML = xmlhttp_request.responseText;
  //将服务器返回的字符串写到页面中ID为message的区域
  } else {
  alert(http_request.status);
  }
  }
  }
  </script>
  
  在<body>区域建立一个文本框,id为163id
  
  <input type="text" id="163id" onpropertychange="IDRequest('http://reg.163.com/register/checkssn.jsp?username=')" />
  
  再建一个id为messsge的空白区域用来显示返回字符串(也可以通过Javascript函数截取一部分字符串显示):
  
  <div id="message"></div>
  
  这样,一个基于AJAX技术的用户名检测页面就做好了,不过这个页面将返回服务器响应生成页面的所有字符串,当然还可以对返回的字符串进行一些操作,便于应用到不同的需要当中。
  
  实例二: 以XMLDocument对象方式返回响应来验证金山通行证帐号是否存在
  
  在上面的例子中,当服务器对HTTP请求的响应被收到后,我们会调用请求对象的reponseText属性。该属性包含了服务器返回响应文件的内容。现在我们以XMLDocument对象方式返回响应,此时将不再需要reponseText属性而使用responseXML属性。
  
  首先登陆金山通行证注册页面,我们发现金山通行证用户名的检测方式为:
  pass.kingsoft.com/ksgweb/jsp/login/uid.jsp?uid=用户名,并且返回XML数据:
  
  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
  <response>
  <method>isExistedUid</method>
  <result>-2</result>
  </response>
  
  当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的应用体验,广大读者可以根据本文讲的原理结合各种样式表现手法作出绚丽多彩的应用,希望本文能够起到抛砖引玉的作用。

时间: 2024-10-03 04:36:28

WEB 2.0中AJAX应用的详细探讨的相关文章

WEB2.0中AJAX应用的详细探讨

ajax|web|web2 最近互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一.AJAX是Asynchronous JavaScript and XML 的缩写.它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括 使用XHTML和CSS标准化呈现: 使用DOM实现动态显示和交互: 使用XML和XSLT进行数据交换与处理: 使用XMLHttpRequest进行异步数据读取: 最后用JavaScript绑

Web 2.0中AJAX技术应用详解

ajax|web|详解 今年互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一.AJAX是Asynchronous JavaScript and XML 的缩写. 它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括:使用XHTML和CSS标准化呈现:使用DOM实现动态显示和交互:使用XML和XSLT进行数据交换与处理:使用XMLHttpRequest进行异步数据读取:最后用JavaScript绑定和处理所

Web2.0中Ajax应用的详解

ajax|web|web2|详解 最近互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一. AJAX是Asynchronous JavaScript and XML 的缩写.它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括:使用XHTML和CSS标准化呈现;使用DOM实现动态显示和交互;使用XML和XSLT进行数据交换与处理;使用XMLHttpRequest进行异步数据读取;最后用JavaScript绑

web2.0中AJAX技术应用

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近互联网上比较火热的话题当然是关于WEB2.0的应用,其中AJAX又是WEB2.0的核心之一.AJAX是Asynchronous JavaScript and XML 的缩写.它并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用,它包括:使用XHTML和CSS标准化呈现;使用DOM实现动态显示和交互

利用IBM Web 2.0 Feature Pack创建Ajax风格的架构

本文展示了如何借助 IBM WebSphere Application Server Feature Pack for Web 2.0 以 Ajax 风格的架构增强 Java 2 Platform, Enterprise Edition (J2EE) 应用程序.了解如何在不重写整个 Web 应用程序的情况下,将 Ajax 风格的架构与现有的应用程序结合起来.此外,您还会了解如何将 Web 2.0 Feature Pack 应用到面向 IBM WebSphere Application Serve

Web 2.0改变了互联网

web|互联网 经过10年发展后,人们通过互联网已经可以完成比之前多得多的工作,得到更丰富.更精确.更迅捷的反馈,以及更加美妙的体验.然而再过10年我们会发现媒体,无论报纸.电视还是互联网,与现在都完全不同,手机而不是纸或pc成为最常用的载体:看电视不再是被动的收看电视台播放的节目而是自己订阅的,而节目呢也许是某个人自己摄制的:你也可能在电视或者网络上看到你的手机在不经意间拍摄上传的画面,并因此获得一笔不菲的酬劳.这不是呓语,也不是幻想,这是Web2.0给我们展现的互联网,届时上网将不再是简单的

Java EE:迎合Web 2.0

很多成功的企业应用程序都是使用 Java EE 平台构建的.但是,Java EE 的设计原理并不能够有效地支持 Web 2.0 应用程序.深入了解 Java EE 和 Web 2.0 原理之间的脱节可帮助您制定明智的决策,从而使用各种方法和工具在一定程度上解决这种脱节.本文将解答 Web 2.0 和标准 Java EE 平台缘何成为失败的组合,并演示为何由事件驱动的异步架构更适合 Web 2.0 应用程序.本文还介绍了一些框架和 API,它们通过支持异步设计使得 Java 平台更加适合 Web

Web 2.0:CRM的秘密武器

Web 2.0与企业2.0是如今两大热门用语,它包含了博客.社区.标签等技术.企业可以借助这类工具来加强CRM.SFA(销售队伍自动化)和客户支持系统中的信息. http://www.aliyun.com/zixun/aggregation/13534.html">Forrester Research的分析师William Band认为,Web 2.0中的社会计算(social computing)是CRM技术的一种有效补充.这些技术能帮助企业以一种全新的方式来促进协同.增进关系. 对初用

Web 3.0:语义的 Web 进入主流

中介交易 SEO诊断 淘宝客 云主机 技术大厅 尽管我们仍处于 Web 2.0 时代,一些行业先驱已经预见了 Web 3.0 的到来. Web 2.0 关注的是社会网络,用户产生内容等技术,Web 3.0 将带来一个语义的 Web (Semantic Web ) (语义的 Web 定义).这是 Web 3.0 Conference & Expo 大会众多参展公司所传递的一个信息. 路透社的 Tom Tague 是该公司的 Calais initiative 项目的主管,该项目旨在将各种内容,包括