第5章 XMLHttpRequest异步传输对象
5.1 简介
Ajax的一个最大的特点是,无须刷新页面便可向服务器传输或读写数据(又称无刷新更新页面),这一特点主要得益于XMLHTTP组件XMLHttpRequest对象。这样就可以向像桌面应用程序一样只同服务器端进行数据层面的交换,而不用每次都刷新界面,也不用每次将数据处理的工作提交给服务器端来做,这样既减轻了服务器的负担又加快了响应速度、缩短了用户等候时间。
1.XMLHttpRequest对象
从上面的介绍中,可以看出XMLHTTP组件的重要性。对于XMLHTTP组件来说,最通用的定义为:XMLHTTP是一套可以在JavaScript、VBScript、Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API。XMLHTTP最大的用处是可以更新网页的部分内容而不需要刷新整个页面。(这个功能正是Ajax的一大特点之一)
XMLHttpRequest对象其实很早就出现了,只是以前浏览器的支持不够。开始时只有IE中才支持,所以大多数的Web程序员都没有怎么用他。但是现在情况发生了很大地改变,Mozilla和Safari把它采用为事实上的标准,主流的浏览器都开始支持XMLHttpRequest对象了。但是这里需要重点说明的是XMLHttpRequest目前还不是一个W3C的标准,所以在不同的浏览器上表现也稍有些区别。
XMLHttpRequest对象是Ajax的核心,XMLHttpRequest是XMLHTTP组件的对象。通过XMLHttpRequest对象我们可以实现在客户端向服务器端发送信息,并接受服务器端返回信息。
2.创建XMLHttpRequest对象
在使用XMLHttpRequest对象发送请求和响应之前,必须首先使用JavaScript对象创建一个XMLHttpRequest对象。因为XMLHttpRequest对象不是一个W3C标准,所以可以采用多种方法并使用JavaScript语言来创建XMLHttpRequst实例化对象。Internet Explore把XMLHttpRequest实现为一个ActiveX对象,其他浏览器(如Friefox、Safari和Opera)把它实现为一个本地JavaScript对象。由于存在这些差别,JavaScript创建XMLHttpRequest对象的代码中必须包含有关的逻辑,从而使用ActiveX技术或者使用本地JavaScript对象技术来创建XMLHttpRequest的一个实例。
创建一个XMLHttpRequest对象实例,并不需要那么详细的编写代码来区别浏览器类型,我们要做的只是检查浏览器是否对ActiveX对象的支持。如果浏览器支持ActiveX对象,就可以使用ActiveX对象来创建XMLHttpRequest对象。否则,就要使用本地JavaScript对象技术创建。其代码如下所示:
var xmlHttp;
function createXMLHttpRequext(){
if(window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHTTPRequest){
xmlhttp = new XMLHTTPRequest();
}
}
在上述代码中,编写了一个跨越浏览器的XMLHttpRequest对象实例。其中代码“if(window.ActiveXObject)”主要判断当前浏览器是否是IE浏览器,如果是则调ActiveX插件来创建。如果是其他浏览器,如Mozilla, Safari等则使用本地JavaScript对象创建。
可以看出,创建一个XMLHttpRequest对象相当容易,首先,要创建一个全局作用域变量xmlHttp来保存对这个对象的引用。createXMLHttpRequest()方法完成创建XMLHttpRequest实例的具体工作。这个方法中只有简单的分支逻辑(选择逻辑)来确定如何创建对象。对Window.ActiveXObject的调用会返回一个对象,也可能返回null,if语句会把调用返回的结果看作是true或false(如果返回对象则为true,返回null则为false),以此指示浏览器是否支持AcitveX控件,相应的得知浏览器是不是Internet Explorer对象,并传入一个串指示要创建何种类型的ActiveX对象,在这个例子中,为构造函数提供的字符串是Microsoft XMLHTTP,这说明创建了一个XMLHttpRequest的一个实例。
如果Window.ActiveXObject调用失败(返回null),JavaScript就会转到else语句分支,确定浏览器是否把XMLHttpRequest实现一个本地JavaScript对象,如果存在window.XMLHttpRequest,就会创建XMLHttpRequest的一个实例。使用这种方式创建的浏览器,通常为Mozilla,Safari等。
由于JavaScript具有动态类型特性,而且XMLHttpRequest在不同浏览器上的实现是兼容的,所以可以用同样的方式访问XMLHttpRequest实例的属性和方法,而不论这个实例创建的方法是什么。这就大大简化了开发过程,而且在JavaScript中也不必编写特定于浏览器的逻辑。
相关阅读:
- ASP.NET 2.0 AJAX中Webservice调用方法 (xiasug, 2009-3-14)
- 《Ajax完全学习手册》 (冷雪傲霜, 2009-4-11)
TAG: AJAX Ajax XMLHttpRequest




