Chinaunix首页 | 论坛 | 博客
  • 博客访问: 199153
  • 博文数量: 163
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1720
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-08 11:41
文章分类

全部博文(163)

文章存档

2011年(1)

2009年(162)

我的朋友

分类:

2009-06-17 16:04:05

正如刚才看到的,我们可以使用IFrame以后台方式请求数据,但是这从本质上来说不过是一种hack式的临时解决方案。最初引入IFrame的设计意图是在页面上显示可见的内容,这种用法歪曲了这个意图。在流行的web浏览器的更新版本中,引入了专门为异步数据传输而设计的对象,我们将会看到,它比IFrame用起来要方便得多。

  XmlDocument和XMLHttpResuest对象并不是Web浏览器中DOM的标准扩展,它们只是碰巧得到了多数浏览器的支持。它们的设计目标很明确,就是用来以后台方式获取数据,这使得发出异步调用的业务使用起来非常流畅。两个对象都是源自微软私有的ActiveX组件,可以在IE浏览器中作为javaScript 对象来访问。其他的浏览器则依照相似的功能和API调用实现了自己的原生对象。两个对象执行的功能很相似,不过XMLHttpRequest可以更加精细 地对请求进行控制。在本书中,我们将主要使用XMLHttpRequest,在这里我们简要介绍一下XmlDocument,以便你了解这个对象与 XMLHttpRequest有哪些不同。代码清单2-8展示了一段简单创建XmlDocument对象的代码。

  代码清单2-8 getXmlDocument()函数

  在大多数现代浏览器中,这个函数都能返回一个具有相同API的XmlDocument对象,尽管在不同的浏览器中创建文档的方式有很大不同。

  这段代码检查文档对象是否支持创建一个原生的XmlDocument对象所需的implementation属性(在最近的Mozilla和 Safari浏览器中都可以找到这个属性)。如果没有找到,它将测试浏览器是否支持ActiveX对象(只有微软的浏览器才能够支持),如果支持,它将尝 试定位一个合适的对象。这段脚本优先使用较新一些的第二版MSXML库。

  注意 检查浏览器的厂商和版本号信息,并且使用这些信息来开发用于不同浏览器的分支代码,是一种很常见的做法。在我们看来,这种做法容易导致错误,因为它无法预 期浏览器的未来版本,并且还会将有能力执行这段脚本的浏览器排除在外。在getXmlDocument()函数中,我们没有尽力去猜测浏览器的版本,而是 直接检查特定的对象是否可用。这个方法也称作对象检测(object detection),可以更容易地支持浏览器未来的版本,以及那些我们没有明确测试过的不常见的浏览器,通常这会使得代码更加健壮。

  代码清单2-9的代码采用与前面的代码类似的方式获得XMLHttpRequest对象,不过略微简单一些。

  代码清单2-9 getXmlHttpRequest()函数

  同样地,我们使用对象检测来测试是否支持原生的XMLHttpRequest对象,如果不支持,再测试是否支持ActiveX对象。在两者都不支持的浏览器中,我们简单地返回null。如何更加优雅地处理失败的情况呢?这个问题我们留到第6章再来更加详细地探讨。

阅读(357) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~