AJAX 使用XMLHttpRequest对象发送和接受数据

 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对象。javascript

<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();
    </script>

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

建立方式能够以下:数组

 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请求,监听服务器状态,并在服务器完成数据响应处理以后接收服务器端返回的信息数据。下面是对其的说明:
onreadystatechange:指定当readyState属性改变时的事件处理句柄,属性只写。
    XMLHttpRequest 对象属性onreadystatechange是readyState状态改变的事件触发器,用来指定当readyState属性发生改变时的处理事件。 在使用过程当中,一般经过将事件处理函数名称赋予onreadystatechange的方式,来为XMLHttpRequest指定事件触发器,而在事件 处理函数中判断readyState状态值并作相应的处理。
    如上:http_request.onreadystatechange = processRequest;processRequest做为事件处理函数,并在processRequest函数体内在readyState状态为 4 时开始执行。
 responseBody:将回应信息正文以unsigned byte 数组形式返回,属性只读。
 responseXML:将响应信息格式化为XML Document对象返回,属性只读。
   
    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请求的状态行,属性只读。
浏览器

  总结,五个步骤:服务器

        1.建立XMLHttpRequest对象。异步

        2.注册回调函数 xmlhttp.oncreadystatechange = 函数名 ;       //注意:该函数名后面不须要加括号。async

        3.设置链接信息 xmlhttp.open();ide

          xmlhttp.open(请求方式,url,是否同步.);           //第一个参数,请求方式,通常get or post,第二个参数,请求url,get请求参数也在里面,第三个参数,true or false ,true表示异步.函数

        4.发送数据。xmphttp.send(data);post

相关文章
相关标签/搜索