在使用
XMLHttpRequest
对象发送请求和处理响应之前,必须先用
JavaScript
创建一个
XMLHttpRequest
对象。由于
XMLHttpRequest
不是一个
W3C
标准,所以可以采用多种方法使用
JavaScript
来创建
XMLHttpRequest
的实例。
Internet Explorer把XMLHttpRequest实现为一个ActiveX对象,其他浏览器(如Firefox、Safari和Opera)把它实现为一个本地JavaScript
对象。由于存在这些差别,
JavaScript
代码中必须包含有关的逻辑,从而使用
ActiveX
技术或者使用本地
JavaScript
对象技术来创建
XMLHttpRequest
的一个实例。
很多人可能还记得从前的那段日子,那时不同浏览器上的 JavaScript 和 DOM 实现简直千差万别,听了上面这段话之后,这些人可能又会不寒而栗。幸运的是,在这里为了明确该如何创建 XMLHttpRequest 对象的实例,并不需要那么详细地编写代码来区别浏览器类型。你要做的只是检查浏览器是否提供对 ActiveX 对象的支持。如果浏览器支持 ActiveX 对象,就可以使用 ActiveX 来创建 XMLHttpRequest 对象。否则,就要使用本地 JavaScript 对象技术来创建。代码清单 2-1 展示了编写跨浏览器的 JavaScript 代码来创建 XMLHttpRequest 对象实例是多么简单。
代码清单 2-1 创建 XMLHttpRequest 对象的一个实例
很多人可能还记得从前的那段日子,那时不同浏览器上的 JavaScript 和 DOM 实现简直千差万别,听了上面这段话之后,这些人可能又会不寒而栗。幸运的是,在这里为了明确该如何创建 XMLHttpRequest 对象的实例,并不需要那么详细地编写代码来区别浏览器类型。你要做的只是检查浏览器是否提供对 ActiveX 对象的支持。如果浏览器支持 ActiveX 对象,就可以使用 ActiveX 来创建 XMLHttpRequest 对象。否则,就要使用本地 JavaScript 对象技术来创建。代码清单 2-1 展示了编写跨浏览器的 JavaScript 代码来创建 XMLHttpRequest 对象实例是多么简单。
代码清单 2-1 创建 XMLHttpRequest 对象的一个实例
var xmlHttp; |
可以看到,创建 XMLHttpRequest 对象相当容易。首先,要创建一个全局作用域变量 xmlHttp 来保存这个对象的引用。 createXMLHttpRequest 方法完成创建 XMLHttpRequest 实例的具体工作。这个方法中只有简单的分支逻辑(选择逻辑)来确定如何创建对象。对 window.ActiveXObject 的调用会返回一个对象,也可能返回 null , if 语句会把调用返回的结果看作是 true 或 false (如果返回对象则为 true ,返回 null 则为 false ),以此指示浏览器是否支持 ActiveX 控件,相应地得知浏览器是不是 Internet Explorer 。如果确实是,则通过实例化 ActiveXObject 的一个新实例来创建 XMLHttpRequest 对象,并传入一个串指示要创建何种类型的 ActiveX 对象。在这个例子中,为构造函数提供的字符串是 Microsoft.XMLHTTP ,这说明你想创建 XMLHttpRequest 的一个实例。
如果 window.ActiveXObject 调用失败(返回 null ), JavaScript 就会转到 else 语句分支,确定浏览器是否把 XMLHttpRequest 实现为一个本地 JavaScript 对象。如果存在 window.
XMLHttpRequest ,就会创建 XMLHttpRequest 的一个实例。
由于 JavaScript 具有动态类型特性,而且 XMLHttpRequest 在不同浏览器上的实现是兼容的,所以可以用同样的方式访问 XMLHttpRequest 实例的属性和方法,而不论这个实例创建的方法是什么。这就大大简化了开发过程,而且在 JavaScript 中也不必编写特定于浏览器的逻辑。