您所在的位置: 首页>>读书频道>>设计开发>>.Net系列>>

1.3 使用AJAX的思考

http://book.51cto.com  2007-07-31 13:04  章立民  机械工业出版社  我要评论(0)
  • 摘要:本书详细介绍了AJAX在Web开发上的应用。主要内容包括:ASP.NET AJAX技术概述、实现异步局部更新页面、UpdatePanel编程功能、PageRequestManager的使用方法、Timer控件、Control Toolkit方法、结合OOP功能、如何在客户端JavaScript调用Web服务、如何从客户端JavaScript调用ASP.NET应用服务以及如何创建客户端功能的组件等。本文是使用AJAX的思考.
  • 标签:ASP.NET  .NET  AJAX  《ASP.NET AJAX Web 应用开发秘诀(VB版)》
1.3   使用AJAX的思考
在AJAX推出之前,市场上早已有其他替代方案可以让页面的呈现方式更加丰富,比方说,Adobe公司的Flash二维(2D)动画软件用来设计和编辑Flash文件,并有浏览器专用的Flash Player外挂软件(Plug-in),用于播放页面中的Flash文件。这就是富因特网应用程序(Rich Internet Applications,RIA)的应用。提出RIA的目的是为了推广Flash,以作为页面应用程序的前端平台(Front-End)界面。这个应用结合了传统应用程序的快速响应、互动性强的优点,再加上页面应用程序无国界与容易传播的特性,从而提供更丰富、更具有互动性和响应特性的用户操作新体验。
又譬如Java Web Start是以Java为基础的一种页面应用程序开发技术,包含Applet的可移植性、Servlet和Java Server Pages(JSP)的可维护性以及XML和HTML这类标记语言的简易性。由于Java Web Start是Java的应用程序,因此当第一次启动Java Web Start时,用户可以从Web服务器下载新的客户端应用程序,尔后便可通过页面中的超级链接或Windows桌面图示或从“开始”菜单启动该程序。
上述这两种技术的最大问题,就是必须事先在客户端安装一个专用的运行环境,比方说,要安装Flash Player或Java Web Start。若与传统应用程序相比较,这不是问题,因为传统应用程序肯定需要在客户端安装相关程序。然而对AJAX而言,其执行所需的环境就是浏览器本身,任谁也不会否认,几乎每一个客户端计算机都会安装浏览器,不论是Internet Explorer、Firefox、Mozilla、Opera或Mac操作系统的Safari等,因此我们可以说,运行AJAX所需的环境早已部署完成,无需再安装任何额外的软件就可以运行。
虽说运行AJAX页面应用程序无需额外部署运行环境,但是开发人员仍然必须注意下列几个问题:
浏览器兼容性
大家都知道,AJAX是以客户端浏览器为运行环境的一种技术,由于浏览器对于JavaScript、DOM、CSS的支持程度总有部分不太相同,或是浏览器本身有错误(Bug),甚至同一种浏览器各个版本之间对于JavaScript、DOM、CSS的支持也可能有其差异性。因此AJAX开发人员面临到的第一个问题就是浏览器兼容性,这很可能造成开发人员在编写AJAX页面应用程序时,往往耗费大量时间在测试浏览器的兼容性,而非测试页面应用程序本身。
为了解决此问题,大部分的AJAX函数库或开发架构(Framework)都会提供一组JavaScript(扩展名为 .js)函数库,采用事先定义好的JavaScript API、JavaScript对象来解决此问题。
浏览器关闭JavaScript功能
JavaScript是多数浏览器都会支持的一种客户端解释式(Interpreter)脚本语言(Scripting Language),其源代码在传送到客户端执行之前,不需要先行编译,也就是说JavaScript是在用户的浏览器上运行时,无需通过服务器的传输便可独立运行。AJAX需要借用大量客户端的JavaScript,万一用户手动关闭浏览器JavaScript功能,如图1-10所示,且如果页面应用程序没有事先检查JavaScript是否被关闭,用户可能会看到浏览器呈现一片空白,或是JavaScript程序代码不会被运行,间接导致AJAX所呈现丰富操作界面通通失效。一个经过缜密设计的页面应用,会先检查浏览器的JavaScript功能是否被关闭,若该功能被关闭即会提示并说明如何启用JavaScript(如图1-11所示)。
图   1-10
附注:开发Rich Client页面应用程序就是为了呈现更丰富的用户界面,如果在Lynx这类视障者使用的纯文本模式浏览器之下,这些丰富的界面将无法呈现,比方说,看不到CSS的样式结果、无法运行JavaScript来创建DOM对象。
操作习惯
AJAX提供页面应用程序更方便、更直观的操作方式,比方说,使用拖放来搬移对象位置、直接在文本段上进行编辑……等等,凡此种种都大大改变了页面的操作习惯,但是请注意,AJAX很可能影响浏览器“后退”按钮的正常行为。在进行动态更新页面时,当用户单击“后退”按钮并不会回到前一个页面的状态,而会回到前一次所浏览的网站,这是因为浏览器只能记下浏览记录中的静态页面。
在一个被完整加载的传统静态页面中,当用户单击“后退”按钮时,就能够取消前一次的操作,并回到上一页,但是在AJAX页面应用程序中,我们却无法这样操作。不过目前已经有不同的方式用来解决这个问题,大多数的做法都是在用户单击“后退”按钮时,通过一对事先创建的隐藏IFRAME标识来将应用程序状态恢复到原本状态(例如:Gmail就是这么做的)。
网络访问延迟
在开发AJAX页面应用程序时,需要慎重考虑网络访问延迟(所谓的网络访问延迟,表示用户向浏览器发出请求到Web服务器返回之间的间隔时间)。如果没有给予用户明确的信息、没有适当地预先读取并处理数据、或是对XMLHttpRequest与XMLHTTP的处理不恰当,都会让用户觉得有所延迟,这是用户最不想看到的结果,而用户也不会想要追根究底来了解发生问题的原因。常见的解决方法是显示一个提示信息,来让用户知道页面应用程序正在进行后台的连线操作,并且正在读取数据与页面内容(如图1-11所示)。
图1-11 
跨站脚本
“跨站脚本”(Cross-Site Scripting)简称为XSS,又被译为“跨站攻击”。跨站脚本是黑客利用动态页面的特性、页面中的程序错误、或是程序开发人员没有限制客户端返回的数据并过滤特殊字符,将具攻击性的JavaScript、VB Script程序代码放置于用户输入数据的字段(例如:TextBox)中,对页面的内容进行攻击。比方说,偷取用户存放在计算机中的Cookie信息,甚至窃取用户所输入的数据,这些数据包括:会话标识码(Session ID)、账号、密码等。或是将页面重新导航到其他页面、改变页面显示的文字和图形、发起网络钓鱼进行诈骗并窃取信息,更厉害的还会将恶意程序代码下载到用户计算机中。
经常遭受跨站脚本攻击的页面有:搜索页面、讨论区、留言板、网站的登录画面等,这表示允许用户输入数据的页面比较容易受到XSS的攻击行为。这是因为页面的用户可以输入数据,当然黑客也可以输入数据,两者输入数据的类型不同,一个是不具破坏性的文本数据,而另外一个则是具有伤害性的恶意程序代码。
当我们使用Visual Studio 2005打开一个新的网站时,在默认状态下,即使我们没有将位于程序代码最上方 <%@ Page 这个指示符中的ValidateRequest属性内容值设置成True,在ASP.NET被执行时,这种攻击行为仍会被拦截掉(如图1-12所示)。
图1-12                                                                       图1-13
如果您的页面程序需要提供用户填写JavaScript程序代码,就必须关闭ASP.NET默认用来防止跨站脚本的设置(如图1-13所示),这样一来却为黑客敞开攻击之门。在此种情况下,我们只能允许用户于字段中输入数字和字符,来防范跨站脚本的攻击行为。至于其他特殊的字符,则需自行编写程序代码以便过滤这些特殊字符,比方说,/、\、%、<、>、" 等。
竞态条件
AJAX是以异步方式向服务器提出请求,这与传统页面程序提出请求的方式并无相异之处,但由于AJAX是以异步方式提出需求,如果同时有多个AJAX提出请求,将无法确保哪一个请求会先得到服务器的响应,进而引发“竞态条件”(Race Condition)问题。此种问题经常发生于应用程序中,有多个线程(Thread)会参与执行,不论这些线程是个别的程序或是一个程序里的线程,只要有两个线程同时被执行,便会尝试修改或读取相同的数据(如图1-14所示)。
为了避免发生这种问题,页面程序开发人员必须自行处理两个线程同时被执行或是在JavaScript里面动手脚,以避免这类的竞争问题发生。比方说,在AJAX需求尚未获得响应之前,先禁用(Disable)“送出”按钮,使其呈现无法使用的状态,但无形之中,却又增加了页面程序开发人员的负担。
会话(Session)生命周期
当超过某一特定时间之后,传统页面程序的会话(Session)会自动中断,但AJAX的XMLHttpRequest(或XMLHTTP)会异步地向Web服务器接收数据,却可能会造成Session的生命周期永不灭亡,引发安全性隐患。又假若用户超过一特定时间没有使用AJAX页面应用程序,Session会在默认的时间内,结束这个Session生命周期。
如果传送的数据并不是非常重要的机密数据,可以使用XMLHttpRequest或XMLHTTP轮询的方式,在Session逾期时间终了之前,无需回送(Post Back)页面便先行通知用户。要特别注意的是,尽量不要使用弹出窗口(Pop-up Windows)来提醒用户,以免被浏览器阻挡。欲解决Session生命周期的问题,可编写一个监控会话(Session)距离逾期还剩余的时间,然后通过JavaScript Alert函数,显示一个提示信息来让用户知道Session即将逾期,用以提醒用户进行继续保有Session或是让Session灭亡的操作(如图1-15所示)。
上述这些议题不论是页面应用程序开发人员或是页面管理人员(Webmaster)都是值得思考的问题,您可不要因为这样就对AJAX持悲观的态度,毕竟这些问题都是可以事先加以防范的。
图1-14
图1-15
【责任编辑:雪花 TEL:(010)68476606-8007】

回书目   上一节   下一节
专题:ASP.NET 2.0基础开发指南
.NET移动与嵌入式技术专题
.NET Framework新手入门专题
VS.NET实用开发专题
ADO.NET实用技巧专题
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有