开发保留标准浏览器功能的AJAX应用程序(1)

ajax|标准|程序|浏览器

作者:Mark Schiefelbein出处:bea责任编辑: 方舟 [ 2006-03-15 08:32 ]Ajax应用程序由于其丰富的功能、交互性以及快速的响应能力而得到人们的普遍赞许


   Ajax应用程序由于其丰富的功能、交互性以及快速的响应能力而得到人们的普遍赞许。它可以使用XMLHttpRequest对象动态地加载数据,而不是加载新的页面。在它大肆进行宣传以及许多人兴奋的同时,有评论指出,Ajax应用程序丢失了浏览器的一些重要功能,包括对后退前进按钮的支持。

  本文将首先阐明为什么在Ajax应用程序中除非显式地构建后退/前进按钮以及其它浏览器功能,否则它们将无法运行的原因。然后,我们将简要介绍开发人员如何解决这些问题。最后,我们将看到有关Backbase Ajax引擎如何支持后退/前进按钮以及其它标准浏览器功能的详细情况。

  Ajax应用程序是否需要后退按钮?

  Ajax承诺,可以让开发人员完全基于标准的Web浏览器技术(通常是指DHTML)创建在视觉上吸引人的、高度交互式的Web应用程序。

  以前开发人员不得不在功能丰富(具有高度交互性的、吸引人的用户界面)和易于到达(不需要进行客户端安装就可以工作在所有Web浏览器下的前端)二者之中作出选择。而Ajax应用程序应该能够产生既“功能丰富”又“易于到达”的前端。

  但是一个界面怎样才算是“功能丰富”的,而一个应用程序又怎样才是“易于到达”的呢?

  很难精确地定义“功能丰富”的含义,但是却很容易直觉地认识到:当您看到一个界面时,您就会知道它是不是功能丰富的。象Microsoft Office之类的桌面应用程序就是功能丰富的。功能丰富的界面使用诸如选项卡和上下文菜单这样的高级UI控件。这样的界面提供一些高级交互方法。例如,拖放、对关注的UI元素进行高亮显示等。传统的浏览器应用程序是功能不丰富的。它们仅限于诸如表单之类的简单控件,交互主要是由到新页面的单击链接组成。我们只要看看微软的电子邮件客户端就可以看出功能丰富和功能不丰富的区别:Outlook是功能丰富的,而Hotmail就是功能不丰富的。

  Ajax应用程序已经由于功能丰富而得到人们的普遍赞许。Google的Gmail就是其中最具代表性的例子。Google所开发的其它Ajax应用程序(Google Suggest、 Google Map)、微软即将推出的名为“Kahuna”的Web邮件客户端以及Backbase RSS Reader都包含了一些高级控件和交互模块。

  通过前面的讨论,可以说Ajax应用程序很明显满足“功能丰富”的标准。那么它是不是“易于到达”的呢?

  首先,最基本的是,只有界面在Web浏览器中运行的应用程序才是“易于到达”的。Ajax应用程序是基于浏览器标准的,因此可以通过Web浏览器来访问。

  但是,仅仅可以通过Web浏览器访问还不够。终端用户希望在使用Web应用程序时所面对的是特定的交互方式。应用程序需要遵从传统的Web交互方式,并提供以下的可用功能:

  • 后退和前进按钮可以正常工作,以便终端用户可以导航到历史记录页面。
  • 用户应该可以创建书签。
  • 支持深链接,以保证终端用户可以将这个页面通过电子邮件发送给朋友和同事。
  • 刷新按钮可以正常工作,以便刷新当前的状态而不是重新初始化应用程序。
  • 开发人员可以使用“查看源文件”看到源代码。
  • 终端用户可以使用“查找”对页面进行搜索。
  • 搜索引擎可以为页面做索引并创建到搜索项的深链接。

  以前讨论的大多数Ajax应用程序的确打破了标准的Web交互方式。在下一节中,我们将讨论为什么许多Ajax应用程序会这么做。

  为什么Ajax应用程序常常会使后退按钮无法正常工作?

  我们所说的Web基于以下三个原则:

  • 使用 (D)HTML来定义界面
  • 使用HTTP实现客户端与服务器间的通讯
  • 使用URI进行寻址

  Ajax编程突破了由以上原则所带来的种种限制,使得界面功能更加丰富。Ajax广泛使用了JavaScript(“J”)以创建功能丰富的UI组件和交互性。Ajax还引入了异步的XML通信(“A”和“X”),也就是使用XMLHttpRequest对象导入新的数据和表示逻辑而不必刷新页面。然而,目前的Ajax模型并没有解决如何处理URI的问题。

  Ajax应用程序对(D)HTML和HTTP的使用方式做了改变,而这种改变带来的直接结果就是后退按钮和Web的基本交互方式的其它元素无法正常工作了。在本节的其余部分,我将说明如何通过以Ajax的方式处理URI来解决上述问题。首先我们来看看在传统的Web应用程序中URI是如何与用户交互相关联的。

  从技术方面来说,用户交互是指用户界面状态的一次更改。状态改变由终端用户发起。浏览器客户端通过向服务器发出页面请求来处理状态更改(REST法则)。服务器将发送新的页面和新的URI到客户端以生成新的界面状态。
简单地说,每个用户交互都是通过会导致如下结果的服务器往返来处理的:

  • 生成新的页面
  • 生成新的URI

  这些Web功能之所以能够被使用,是因为浏览器在它的历史记录堆栈中记录了连续的URI,并在地址栏中向终端用户显示当前URI,用户可以通过地址栏复制URI,并将其发送给朋友。当用户单击后退按钮或者向浏览器的地址栏中粘贴一个来自于电子邮件的URI时,就会触发一次到服务器的往返。因为服务器负责状态管理,所以它就可以生成相应的页面。

  Ajax应用程序与传统的Web应用程序之间的主要区别在,Ajax应用程序可以处理用户的交互而无需页面重新加载。例如,通过XMLHttpRequest对象从服务器载入数据,或者使用JavaScript来处理拖放客户端。

  在上面的两个例子中,状态改变了,但是却没有生成新的URI。因此,单击后退按钮或刷新按钮会产生意外的结果,在地址栏中也不会有深链接的URI。

  为了提供传统的Web可用功能,Ajax应用程序需要以类似于服务器处理传统的Web应用程序的方式来处理URI客户端。Ajax应用程序需要实现以下功能:

  • 当客户端状态发生改变时,生成一个URI,并将其发送到浏览器
  • 当浏览器请求新的URI时可以重新创建状态。

  实现以上功能后,浏览器的历史记录就可以正常工作,浏览器的地址栏就可以显示URI,当然,您也就可以将它发送给朋友了。

  这里还有另外一个难点,那就是如何确定Ajax引擎什么时候需要实现以上功能(例如,哪一次状态改变需要创建新的URI)。在传统的模式中,每一次页面刷新都对应着一次URI更新。而在Ajax模式中,每一个客户端事件都将新的URI添加到浏览器堆栈中。交互设计者和开发人员将不得不做出决定:哪一次状态改变是有意义的。只对有意义的状态改变才需要生成URI。

  下面我们对提供Web可用功能的Ajax应用程序在客户端需要实现的功能做一下总结:

  • 创建历史记录
    • 保存有意义的状态
    • 生成相应的URI
    • 将这个URI添加到浏览器的堆栈中
  • 恢复历史记录
    • 检测URI的改变
    • 通过URI重新创建状态
  • Ajax: 一个建立Web应用的新途径
  • Ajax的错误处理机制探讨(2)
  • Ajax的错误处理机制探讨(1)
  • 初次体验.NET Ajax无刷新技术
  • Rails系统中的AJAX开发技术简析(4)
时间: 2025-01-02 12:25:35

开发保留标准浏览器功能的AJAX应用程序(1)的相关文章

开发保留标准浏览器功能的AJAX应用程序(3)

ajax|标准|程序|浏览器 使用碎片标识符,我们可以创建一个"Ajax-URI",其中的客户端部分和服务器端部分使用"#"隔开. JavaScript提供了window.location()函数,以便通过URI更新浏览器的历史记录和地址.此外,我们可以使用window.location.hash()直接访问碎片标识符. 在下面的代码片断中,您可以看到如何通过对选择框使用onchange事件处理程序来扩展我们的代码,该处理程序使用一个"Ajax-URI&q

开发保留标准浏览器功能的AJAX应用程序(2)

ajax|标准|程序|浏览器 在Ajax中支持后退按钮的基本设计思想 在这一节中,我们将讨论在Ajax应用程序中支持后退按钮所需的基本步骤,并给出说明所需步骤的简单示例代码. 简单示例程序如图1所示,在界面中将有一个选择框,它有两个值:"Year 1"和"Year 2".对于这个程序,我们将在选择框值发生改变时跟踪历史记录.这意味着用户可以首先选择"Year 2"然后单击后退按钮后退到先前的选择. 开发保留标准浏览器功能的AJAX应用程序(2)-

开发保留标准浏览器功能的AJAX应用程序(4)

ajax|标准|程序|浏览器 案例分析:包含后退按钮和深链接的Ajax论坛 Backbase Ajax引擎是一个成熟的.功能丰富的Ajax软件包.对所有传统Web可用功能的支持是Backbase的优点之一. Backbase DevNet包含了为开发人员提供的.与Backbase和Ajax有关的信息.而开发人员论坛是DevNet的一部分. Backbase Web应用程序(包括DevNet及其讨论论坛)是使用Backbase构建的.为了演示该论坛功能丰富和易于到达的特点,我们将逐步遍历论坛的典型

开发保留标准浏览器功能的AJAX应用程序

ajax|标准|程序|浏览器 Ajax应用程序由于其丰富的功能.交互性以及快速的响应能力而得到人们的普遍赞许.它可以使用XMLHttpRequest对象动态地加载数据,而不是加载新的页面. 在它大肆进行宣传以及许多人兴奋的同时,有评论指出,Ajax应用程序丢失了浏览器的一些重要功能,包括对后退前进按钮的支持. 本文将首先阐明为什么在Ajax应用程序中除非显式地构建后退/前进按钮以及其它浏览器功能,否则它们将无法运行的原因.然后,我们将简要介绍开发人员如何解决这些问题.最后,我们将看到有关Back

开发保留标准的浏览器功能的AJAX应用

ajax|标准|浏览器 摘要AJAX应用因为它们的表现力的丰富.更加互动和更加迅速的响应得到了赞扬声:这些优点都是通过使用XMLHttpRequest对象来动态的载入数据而获得的,而不是重新载入新的页面.在大量的宣传和刺激中,却有一些批评的声音指出,AJAX应用破坏了一些重要的浏览器特性,这其中包括对前进/后退按钮的支持.本文首先解释了为什么除非明确的将那些功能做进AJAX应用,否则前进/后退按钮和其他一些浏览器功能不能正常工作.然后简单的列出开发者如何解决上述问题,最后我们将详细的看一看Bac

开发端到端的Ajax应用程序,第1部分:用一个场景设置Ajax环境

Ajax(Asynchronous JavaScript + XML)正在迅速地成为时髦的技术,它可以为在浏览器中运行的 Web 应用程序提供具有桌面质量的软件特性.开放源码软件(比如 Linux-Apache-MySQL-PHP,即 LAMP)和基于开放标准的 Java 2 Platform, Enterprise Edition 中间件(比如 IBM WebSphere Application Server Community Edition)为开发和部署 Ajax Web 应用程序提供了出

Docker 实现浏览器里开发Android应用的功能_docker

在浏览器里开发Android应用          这里需要用到Docker的知识, Che 发布后对Android应用开发多了一个工具,这里就对如何实现该功能就行详细介绍:                                                                    Eclipse Che 最近Che发布了正式版,那我就介绍下在Che上开发Android吧-- 使用Che需要懂得一些Docker的知识,只需要一点点即可,因为Che是基于Docker的,所

GWT开发AJAX应用程序教程

一. 引言 如果你是一个Java软件和Ajax开发者,那么,Google Web Toolkit(GWT)应该已经引起你的关注. Google公司已经于2006年5月在Apache许可协议下发布了这种免费的开发工具包.GWT的设计目的是为了简化用Java语言开发Ajax应用程序.Google初始发行的beta版本可以适用于Windows和Linux平台,并许诺稍后要发行一个Mac OS X版本. 本文将探讨在Mac OS X上使用GWT和熟悉的Java工具,例如Apache Ant,Tomcat

用事实说话!AJAX应用程序开发七宗罪

ajax|程序 AJAX bandwagon是个好去处.它带给你更快.更高效.更强动态的应用.但它也有自身的缺陷. 初一看,具备一些常识似乎就能避免这些缺陷,在一定程度上,的确如此.但从DHTML起源来看,AJAX应用程序充满了结构性差异.不论你在应用程序开发工作中掌握了多少常识,从别人犯的错误中吸取教训也是有好处的.我们称这些错误为"七宗死罪",但它们不能代表全部的错误. 事实上,在你犯这些致命过失之前,你可能首先犯了一些较轻的错误.因此我们从这里着手.这是每个人都可能犯的错误.这些