使用AJAX技术构建更优秀的Web应用程序

ajax|web|程序

  一、 简介

  异步JavaScript+XML(即Ajax),是一种创建交互式web应用程序的Web开发技术。这种程序使用JavaScript和XML从客户端提交服务器请求,且整个过程中仅需要交换少量的数据而不必提交整个web页面。因此,这样的程序将更快和更具响应性,并将成为新一代客户机-服务器系统的重要基础技术之一。你可以在站点http://www.google.com/webhp?complete=1&hl=en处看到一种良好的AJAX实践技术展示。在此页面中,如果你把任何字母输入到文本框内,那么随后就会出现一个下拉列表框,其中的内容直接来自于服务器而不必提交整个页面。AJAX的核心是XMLHttpRequest对象。客户端能够在后台检索并直接提交XML数据。为了把检索的XML数据转换成可生成的HTML内容,需要依赖于客户端文档对象模型(DOM)读取XML文档结点树并且组成用户看得见的HTML元素。其实,AJAX并非象HTML,DHTML等一样的单一技术,它结合了不同的技术:

  ·XMLHttpRequest对象被使用于与web服务器异步地交换数据。

  ·XML被普遍用作把数据传输回服务器的格式(尽管任何格式都能使用,例如普通文本,HTML等)。

  ·如果使用XML作为转换格式,那么DOM通常与如JavaScript这样的客户端脚本语言一起使用来动态地显示和描述交互信息。

  ·XHTML(或HTML),CSS用于标记和信息格式化。

  二、 XMLHttpRequest对象

  从历史来看,是微软首先在其Internet Explorer 5 for Windows中以一个ActiveX对象形式实现了XMLHttpRequest对象。随后,由Mozilla工程的工程师实现了Mozilla 1.0(和Netscape 7)的一种兼容的本机版本;而稍后,苹果公司在其Safari 1.2上也实现了相同的工作。其实,在W3C标准的文档对象模型(DOM)Level 3加载与存储规范中,也提到了类似的功能。现在,它成为一种事实上的标准,并开始在以后发行的大多数浏览器中得到实现。

  (一) 创建对象

  XMLHttpRequest对象的创建方式因浏览器不同而有所不同。对于Safari和Mozilla来说,其创建方式如下所示:

var req = new XMLHttpRequest();
  对于Internet Explorer 5.0+(指5.0及更高版本),则要把对象名传递到ActiveX构造函数中:

var req = new ActiveXObject("Microsoft.XMLHTTP");
  该对象的方法控制所有的操作,而其属性存储从服务器返回的各种数据片断,例如XMLHttpObject.responseText包含从服务器返回的xml或字符串值。

  (二) 方法

  在Windows IE 5.0+、Safari 1.2和Mozila中支持的XMLHttpRequest对象的方法列举如下:

方法 描述
abort() 取消当前的请求。如果你在一个不处理请求(readyState 0或4)的对象上调用它,"神秘的事情"发生了。
getResponseHeader("headerLabel") 返回单个头标签的字符串值
getAllResponseHeaders() 以一个串形式返回完整的头(标签和值)集合
open("method","URL"[,asyncFlag[, "userName"[,"password"]]]) 指派目标URL、方法及一个悬挂请求的其它可选属性
send(content) 传输请求。(可选择地)其中可以加入可寄送的字符串或DOM对象数据
setRequestHeader("label","value") 把一个标签/值对指派给要发送的请求中的头部

  在上面的方法中,open和send方法是最重要的。下面,让我们首先从应用程序的观点来讨论open方法。

var req;
………………………
req = new ActiveXObject("Microsoft.XMLHTTP");
……………
var url="AjaxServer.aspx?PubID="+ID;
……………
//打开一个到URL的GET请求
req.open("GET",url,true);
//实际发送一个空请求
req.send(null);
  注意

  在这个示例应用程序中,AjaxClient.aspx页面是用户接口,AjaxServer.aspx则负责提供每一个用户请求时的数据。要特别注意的是,AjaxServer.aspx页面不应该包含任何HTML。你可以测试一下如果页面包含HTML将会发生什么。

  open方法的第一个参数(见上面表格中的Open函数)指示当前操作为一个GET操作或是POST操作。在进行简单的数据检索时,一般使用GET。当向外传输的数据包大于512字节且操作包括服务器端活动(如插入,更新等)时,一般使用Post。接下来,我们看一下"url"参数。这个参数可以是一个完整的url也可以是一个相对url。在上面例子中,使用的是相对的url。"asyncFlag"参数指示在执行send方法后是否立即处理到来的脚本(这意味着不必等待是否有响应)。最后两个参数分别是"username"和"password",如果"url"中提供这些数据的话。

  另一个重要的方法是send方法,它实际上使用一个消息体发送请求。对于本例而言,它只是发送一个空请求。

[
//实际发送一个空请求
req.send(null);
]
  (三) 属性

属性 描述
onreadystatechange 每当状态改变时激发的事件的事件处理器。其中,readyState对象状态整数含义如下:0=uninitialized1=loading2=loaded3=interactive4=complete
responseText 经服务器处理后返回的数据的字符串版本
responseXML 经服务器处理后返回的DOM兼容的数据文档对象
status 由服务器返回的数字代码,例如404代表"Not Found",200代表"OK"
statusText 伴随着状态代码的字符串信息

  在此,应用程序中使用了onreadystatechange:

//这是事件处理器机制;在本例中,"RequestProcessor"即是事件处理器。
req.onreadystatechange=RequestProcessor;
  对于这个应用程序来说,"RequestProcessor"是客户端的事件处理器。现在,在事件处理器内,使用readyState属性来获得各种状态。值4显示已经完成某种处理。现在,在处理结果前,你应该检查状态或statusText以决定操作成功与否。在这个应用程序中,我是以下面方式实现的:

function RequestProcessor()
{
 //如果readyState处理"Ready"状态
 if(req.readyState == 4)
 {
  //返回的状态代码200意味着一切顺利
  if(req.status == 200)
  {
   //如果responseText不空
   //req.responseText实际上是一个由AJAXServer.aspx的"Response.Write("" + sbXML.ToString() + "");"方法编写的字符串
   if(req.responseText != "")
   {
    populateList(req.responseXML);
   }
   else
   {
    clearSelect(publishedBooks);
   }
  }
 }
 return true;
}
  注意 对象req被声明为一个页面级的变量:

var req = new ActiveXObject("Microsoft.XMLHTTP");
  警告

  请求目的的url必须与客户端脚本处于同一个域中。原因是,XMLHttpRequest对象采用与客户端脚本一致的封装技术。在大多数支持这种功能的浏览器上,拥有存取XMLHttpRequest对象的脚本的页面都需要使用http:协议检索。这意味着,你无法在一个本地硬盘上(file:协议)进行页面测试。

  三、 实际问题

  在AJAX中,如果网络或远程服务器出现中断,会发生什么呢?实际上,存在两个主要问题;默认地,它们并没有在XMLHttpRequest对象中得到解决。这两个主要问题是:

  1.处理延迟:如果网络或远程服务器耗费较多时间,那么这个问题如何与你的AJAX应用程序相联系呢?

  2.响应顺序:潜在地,网络(或服务器)会不断变化。这意味着,响应可能不会以与请求相同的顺序返回。

  为了处理上面这两个问题,程序员必须编写代码来解决这个问题。对于第一个问题,一种可能的方案如下所示:

function callInProgress(xmlhttp) {
 switch ( xmlhttp.readyState ) {
  case 1,2,3:
   return true;
   break;
   //Case 4和0
  default:
   return false;
   break;
 }
}
  现在,在调用send()前,我可以先检查一下是否该对象正处于忙态:

if ( !callInProgress(xmlhttp) ) {
 xmlhttp.send(null);
} else {
 alert("I'm busy. Wait a moment");
}
  (一) 支持Ajax技术的浏览器

  ·微软Internet Explorer版本5.0及以上版本,和基于它的浏览器(Mac OS版本不支持)

  ·基于Gecko的浏览器,如Mozilla,Mozilla Firefox,SeaMonkey,Epiphany,Galeon和Netscape版本7.1及以上版本

  ·实现KHTML API版本3.2及以上版本的浏览器,包括Konqueror版本3.2及以上版本,还有Apple Safari版本1.2及以上版本

  ·Opera浏览器版本8.0及以上版本,包括Opera Mobile浏览器版本8.0及以上版本

  (二) 不支持Ajax技术的浏览器

  ·Opera 7及以下版本

  ·微软Internet Explorer 4.0及以下版本

  ·基于文本的浏览器,如Lynx和Links

  ·没有可视化实现的浏览器

  ·1997年以前的浏览器

  (三) 本文示例应用程序特定需求

  软件要求:

  1.ASP.Net 2.0;

  2.MS SQL Server 2000,并要求相应的pubs数据库设置;

  3.改变web.config文件中的DB连接字符串("CONN_STRING"键)。

<APPSETTINGS>
<ADD value="data source=cal-slcu2-196;Database=pubs;User=sa;PWD=sa" key="CONN_STRING" />
</APPSETTINGS>
  变量或类名应该象上面这样被包括到<code>标记中。

  四、 总结

  本文概括性地归纳了基于AJAX技术构建下一代流行Web应用程序的主要技术及有关概念,并给出一个完整示例程序的关键片断的分析。

时间: 2024-10-08 06:20:39

使用AJAX技术构建更优秀的Web应用程序的相关文章

使用jQuery UI和jQuery插件构建更好的Web应用程序

本文同时也介绍了一些 jQuery 插件,可以加速 Web 开发并有助于创建我们所熟悉的,且流畅.直观.灵活的界面. 如果您是一个传统桌面应用程序开发人员,并且正在转向开发 Web 应用程序,在学习 HTML 和 CSS 方面您可能不会遇到什么困难,但为应用程序设计一个漂亮的外观可能会是一个挑战.jQuery UI 和各种 jQuery 插件对于快速将 Web 应用程序组合在一起有极大的帮助,只需在 GUI 设计上花费少量的时间. JavaScript 和 jQuery 如果您希望页面有任何形式

使用缓存构建更快的Web应用程序

简介:使用 Java 技术的 Web 开发人员可以使用缓存实用程序快速提 升他们的应用程序的性能.Java 缓存系统(Java Caching System,JCS)是一个 用于 Java 应用程序的强大分布式缓存系统,它是拥有简单 API 的高度可配置的 工具.本文将概述 JCS 并展示如何使用它来提高 Web 应用程序的速度. 许多 Web 应用程序会根据桌面应用程序重新编写:理想情况下,这些应用程 序的速度和可伸缩性应该与桌面版本一样.几乎所有 Web 应用程序都可以从速度 方面的增长获益

使用Google Sitebricks构建更好的Web应用程序

使用 Maven.Sitebricks 和 Guice 创建一个样例 Java Web 应用程序 简介 Sitebricks 目前仍然处于测试阶段,它是一种新的 Java Web 应用程序框架.您可能想问:"为什么我还需要另一个 Web 框架?" 通过 Google Sitebricks,您可以快速构建一个可由他人维护或操作的 Web 应用程序.Sitebricks 构建于 Guice 之上.它将许多 Guice 原则扩展到 Web.它像 Guice 一样大量使用注释将配置作为代码的一

如何使用AJAX技术构建优秀的Web应用程序

一. 简介 异步JavaScript+XML(即Ajax),是一种创建交互式web应用程序的Web开发技术.这种程序使用JavaScript和XML从客户端提交服务器请求,且整个过程中仅需要交换少量的数据而不必提交整个web页面.因此,这样的程序将更快和更具响应性,并将成为新一代客户机-服务器系统的重要基础技术之一.你可以在站点http://www.google.com/webhp?complete=1&hl=en处看到一种良好的AJAX实践技术展示.在此页面中,如果你把任何字母输入到文本框内,

用Microsoft ASP.NET AJAX技术构建交互式的用户界面—part1

导言 在过去的几年时间里,web开发员开始使用JavaScript来向web服务器执行异步回传,也就是仅仅发送和接收必要的数据.这些技术通常统称为AJAX.如果设计 合理的话,具有AJAX功能的web应用程序,其用户界面的高度交互性完全可以与桌面应用程序相媲美. 由于AJAX包含了网络体系(networking stack)里不同层面的很多 技术,在不使用AJAX framework的情况下执行AJAX很困难也很容易出错.还好,微软为ASP.NET开发者推出了免费的AJAX framework:

Ajax基础教程(4)- 实现基本Ajax技术 4.7 动态更新Web页面

如前所述,如果页面中只有一小部分需要修改,此时Ajax技术最适用.换句话说,以前实现一些用例时,为了更新页面中的一小部分总是需要使用完全页面刷新,这些用例就很适合采用Ajax技术. 考虑一个有单个页面的用例,用户向这个页面输入的信息要增加到列表中.在这个例子中,你会看到列出某个组织中员工的Web页面.页面最上面有3个输入框,分别接受员工的姓名.职位和部门.点击Add(增加)按钮,将员工的姓名.职位和部门数据提交到服务器,在这里将这些员工信息增加到数据库中. 当使用传统的Web应用技术时,服务器以

用Microsoft ASP.NET AJAX技术构建交互式的用户界面— Part 2

导言: 在前面部分我们概述了ASP.NET AJAX framework,我们探讨了如何下载和安装该框架,同时对UpdatePanel控件进行了相关概述.把UpdatePanel控件拖动到页面 ,再把要参与局部回传的控件放置到UpdatePanel控件里,就可以很简单的创建交互式的用户界面.任何由UpdatePanel内的控件触发的回传都会转化为局部页面回传.和整页 回传类似,局部回传也向服务器发送一个请求,而不经由客户端脚本.另外,在页面上只有这些区域的编码在HTTP响应里进行返回,且通过Ja

AJAX技术开发Back按钮问题的应用程序

ajax|按钮|程序|问题 一. 简介 AJAX,一个异步JavaScript和XML的缩略词,是最近出来的技术词语.异步意味着你可以经由超文本传输协议(HTTP)向一个服务器发出请求并且在等待该响应时继续处理另外的数据.这就意味着,例如,你可以调用一个服务器端脚本来从一个数据库中以XML方式检索数据,把数据发送到存储在一个数据库的服务器脚本,或者简单地装载一个XML文件以填充你的Web站点而不需刷新该页面.然而,在这项新技术提供巨大能力的同时,它也引起了在"Back"按钮问题上的很多

AJAX技术开发“Back”按钮问题的应用程序

ajax|按钮|程序|问题 一. 简介 AJAX,一个异步JavaScript和XML的缩略词,是最近出来的技术词语.异步意味着你可以经由超文本传输协议(HTTP)向一个服务器发出请求并且在等待该响应时继续处理另外的数据. 这就意味着,例如,你可以调用一个服务器端脚本来从一个数据库中以XML方式检索数据,把数据发送到存储在一个数据库的服务器脚本,或者简单地装载一个XML文件以填充你的Web站点而不需刷新该页面.然而,在这项新技术提供巨大能力的同时,它也引起了在"Back"按钮问题上的很