欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

AJAX入门之XMLHttpRequest慨述

程序员文章站 2022-06-24 16:17:03
在使用xmlhttprequest对象发送请求和处理响应之前,必须先用javascript创建一个xmlhttprequest对象。由于xmlhttprequest不是一个...
在使用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对象的一个实例

var xmlhttp;

function createxmlhttprequest() {
  if (window.activexobject) {
   xmlhttp = new activexobject("microsoft.xmlhttp");
  }
  else if (window.xmlhttprequest) {
   xmlhttp = new xmlhttprequest();
  }
}

  可以看到,创建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中也不必编写特定于浏览器的逻辑。