Ajax之XMLHttpRequest对象

XMLHttpRequest对象

我对XMLHttpRequest对象使用的理解:
1.创建:

var xhr=new XMLHttpRequest();

2.打开:

xhr.open("get","example.php",false);

open()接受三个参数:要发送的请求的类型(”get”、”post”等)、请求的URL和表示是否异步发送请求的布尔值。

这行代码会启动一个针对example.php的GET请求。有关这行代码,需要说明两点:一是URL相对于执行代码的当前页面(当然也可以使用绝对路径);二是调用open()并不会真正发送请求,而只是启动一个请求以备发送。
3.发送:

xhr.send(null);

这里的send()方法接收一个参数,即要作为请求主体发送的数据。如果不需要通过请求主体发送数据,则必须传入null,因为这个参数对有些浏览器来说是必需的。调用send()之后,请求就会被分派到服务器。

注意:

由于在IE7以前的版本中,可能会遇到三种不同版本的XHR对象,而IE7+、Firefox、Opera、Chrome和Safari都支持原生的XHR对象。所以可以使用下面的代码在所有浏览器中创建XHR对象:

function createXHR(){
    if(typeof XMLHttpRequest !="undefined"){
        return new XMLHttpRequest();
    }else if(typeof ActiveXObject !="undefined"){


        if(typeof arguments.callee.activeXString != "string"){
        var versions=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],i,len;
        for(i=0,len=versions.length;i<len;i++){
                try{
                    new ActiveXObject(versions[i]); 
                    arguments.callee.activeXString=version[i];
                    break;
                }catch (ex){
                    //跳过
                }
            }

        }
        return new ActiveXObject(arguments.callee.activeXString);



    }else{
            throw new Error("No XHR object avilable.");
        }
}

如果open()中的第三个参数是false,也就是说如果请求是同步的,JavaScript代码会等到服务器响应之后再继续执行。在收到响应后,响应的数据就会自动填充XHR对象的属性,相关的属性简介如下:

  • responseText: 作为响应主体被返回的文本。
  • responseXML: 如果响应的内容类型是”text/xml”或”application/xml”,这个属性中将保存包含着响应数据的XML
  • status: 响应的HTTP状态
  • statusText: HTTP状态的说明

当发送异步请求时,可以检测XHR对象的readyState属性,该属性表示请求/响应过程的当前活动阶段。这个属性可取的值如下:

  • 0:未初始化。尚未调用open()方法
  • 1:启动。已经调用open()方法,但尚未调用send()方法。
  • 2:发送。已经调用send()方法,但尚未接收到响应。
  • 3:接收。已经接收到部分响应数据。
  • 4:完成。已经接收到全部响应数据,而且已经可以在客户端使用了。
var xhr=createXHR();
xhr.onreadystatechange=function(){
    if(xhr.readyState==4){
        if((xhr.status>=200 && xhr.status<300)||xhr.status==304){
            alert(xhr.responseText);
        }else{
            alert("Request was unsuccessful:"+xhr.status);
        }
    }
};

xhr.open("get","example.txt",true);
xhr.send(null);

另外,在接收到响应之前还可以调用abort()方法来取消异步请求,如下:

xhr.abort();

调用这个方法后,XHR对象会停止触发时间,而且也不再允许访问任何与响应有关的对象属性。在终止请求之后,还应该对XHR对象进行解引用操作。由于内存原因,不建议重用XHR对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值