Ajax与XMLHttpRequest对象

翻译|其它|编辑:郝浩|2007-09-03 14:04:57.000|阅读 1324 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

XMLHttpRequest    XMLHttp  组件的对象,通过这个对象,Ajax可以像桌面应用程序一样只与服务器进行数据层的交换, 而不必每次都刷新界面,也不必每次将数据处理的工作都交给服务器来做;这样既减轻了服务器负担又回忆了响应速度,缩短了用户的等待时间。


XMLHttpRequest 
对象与  Ajax

  Ajax  应用程序中,XMLHttpRequest  对象负责将用户信息以异步通信地发送到服务器端,并接收服务器响应信息和数据。

需要注意的是  JavaScript  本身并不具有向服务器发送请求的能力,要么使用  window.open()方法重新打开一个页面,要么使用  XMLHttpRequest  对象发送请求,不同的是,前者是普通的即同步交互模式,而后者是异步交互模式。

XMLHttpRequest  对象的属性和方法。

IE5.0 开始,开发人员就可以在  WEB  页面内部使用  XMLHTTP ActiveX  组件扩展自身的功能,而  Mozilla1.0  NetScape7则是创建继承  XML  的代理类  XMLHttpRequest;对于大多情况  XMLHttpRequest    XMLHttp  组件很相似,方法和属性类似,只是部份属性不同。以下代码演示了如果在IE以及  NetScape  等浏览器中创建  XMLHttpRequest  对象。

<script language="javascript">
        //
定义一个变量
        var http_request = false;
        //IE 
浏览器中创建
        http_request = new ActiveXObject("Msxml2.XMLHTTP");//
新版本  IE
        http_request = new ActiveXObject("Microsoft.XMLHTTP");//
旧版本  IE
        //Netscope 
浏览器
        http_request = new XMLHttpRequest();
    <!--</span-->script>

需要注意的是 在微软最新的 IE7.0版本浏览器中也已经支持了  XMLHttpRequest,也就是说在IE7.0中同时支持以及上二种创建方式。在我们开发  AJAX  应用程序时一定要注意要兼容浏览器类型。创建方式可以如下:

    var http_request = false;
    function createXMLHttpRequest()
     {        
        http_request = false;
        //
开始初始化  XMLHTTPRequest  对象
        if(window.XMLHttpRequest)//
如果是  window.XMLHttpRequest  对象
         {
            //Mozilla,netscape 
浏览器
            http_request = new XMLHttpRequest();    
            if (http_request.overrideMimeType)  {//
设置  MiME  类别
            //
有些版本的浏览器在处理服务器返回的未包含  XML mime-type  头部信息的内容时会报错,因此,要确保返回的内容包含  text/xml  信息。
            http_request.overrideMimeType("text/xml");
        }
        }
        else if(window.ActiveXObject)//
如果是  window.ActiveXObject
         {
            //IE 
浏览器
            try
             {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");//IE 
较新版本
            }
            catch (e)
             {
                try
                 {
                    http_request = new ActiveXObiect("Microsoft.XMLHTTP"); //ie 
旧版本
                }
                catch (e) {}
            }
        }
        if(!http_request)
         {
            //
异常,创建对象实例失败
            window.alert("
不能创建  XMLHttpRequest  对象实例。");
            return false;
        }
    }

这样就是一个简单的跨浏览器的创建方法。

另外  XMLHttpRequest  对象提供了一系列属性和方法,来向服务器端发起异步  HTTP  请求,监听服务器状态,并在服务器完成数据响应处理之后接收服务器端返回的信息数据。下面是对其的说明:

 

XMLHttpRequest 对象属性

 

onreadystatechange:指定当  readyState  属性改变时的事件处理句柄,属性只写。

XMLHttpRequest  对象属性  onreadystatechange    readyState  状态改变的事件触发器,用来指定当  readyState  属性发生改变时的处理事件。在使用过程中,通常通过将事件处理函数名称赋予  onreadystatechange  的方式,来为  XMLHttpRequest  指定事件触发器,而在事件 处理函数中判断  readyState  状态值并做相应的处理。

如上:http_request.onreadystatechange = processRequest;processRequest  作为事件处理函数,并在  processRequest  函数体内在  readyState  状态为 4 时开始执行。

 

readyState:返回当前请求的状态,属性只读。

这些状态用长度为4的整形数据表示,其属性的状态含义如下:

0:未初始化(对象已经建立,但是未初始化,即尚未调用  open  方法创建  http  请求)

1:初始化(对象已经建立,但是未调用  send  方法发送  http  请求)

2:发送数据(send  方法已经被调用,但是当前的状态以及  http  头未知)

3:数据传送中(已经接收部分数据,因为响应及  http  头不全,这时通过  response  系统方法获取部分数据会出现错误)

4:传送完成(数据完毕,此时可以通过  response  系统方法获取完整的回应数据)

 

responseBody:将回应信息正文以  unsigned byte  数组形式返回,属性只读。

 

responseText:以字符串的形式返回服务器响应信息,属性只读。

 

responseXML:将响应信息格式化为  XML Document  对象返回,属性只读。

 

XMLHttpRequest  对象的方法以及含义如下

abort:取消当前请求;

语法:http_request.abort();调用此方法,当前请求返回  uninitialized  状态。

getAllResourceHeaders:获取相应的全部  http  头信息;像  JSP  中的  HttpServletRequest  对象一样,获取  http  请求的请求头信息,语法:headers = http_request.getAllResourceHeaders();

getResourceHeader:从响应信息中获取指定的  http  头信息。

语法:head = http_request.getResourceHeader("header-name");

open:创建一个新的  http  请求,并指定此请求的方法,URL,以及验证信息(用户名/密码)。

语法:http_request.open(method,url,async,user,password);

Async  为布尔值,指定请求是否异步方式,默认为  true;如果为真,当  state  状态改变时会调用onreadystatechange  属性指向的回调函数。如果服务器需要验证,则应该指定用户名和密码 。
send:
发送请求到  http  服务器并接收回应。创建  http  请求后,就可以向服务器发送  http  请求,send  方法被调用

语法:http_request.send(varBody);

参数  varBody  为要发送给服务器的内容。如果没有内容要发送,varBody  参数可以省略,但最好写为null,因为如果省略不写在  Firfox  中会 报错,所以就为  http_request.send(null);。此方法的同步或异步方式取决于  open  方法中的  async  参数。

setRequestHeader:单独设定请求的某个头。

status:返回当前  HTTP  请求的状态码,属性只读。如:404文件未找到200成功

statusText:返回当前  HTTP  请求的状态行,属性只读。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:JavaEye

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP