1 _AJAX内置对象的创建及使用

AJAX的原理:利用浏览器内置的XMLHttpRequest对象同步或者异步的获得和显示来自服务器的数据,也是利用HTTP协议为载体,和普通点击网页链接发送请求的区别就是,AJAX不会刷新页面。这个特性可以弥补BS架构装载页面慢的缺点。

 

        由于IE6/IE5.5都将XMLHttpRequest对象实现为一个ActiveX对象,所以在javascript中需要依靠条件判断代码来创建XMLHttpRequest对象。

 

创建AJAX对象的模板代码

 

var xhr = false;

if (window.XMLHttpRequest) {
    //在IE7+,firefox,Mozilla浏览器中被支持
    xhr = new XMLHttpRequest();
} else {
    //在IE5.5,IE6中被支持
    if (window.ActiveXObject) {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
}

if (xhr) {
    //注册回调函数
   xhr.onreadystatechange = method;
    xhr.open("", url, true);
    xhr.send(null);
} else {
    alert("浏览器不支持AJAX,请升级");
}
//回调函数
function method() {
    if (xhr.readyState == 4) {
        if (xhr.status == 200) {
            //这里就可以利用XMLHttpRequest对象提供的方法进行操作
     }
    }
}

 

 

      之所以要先判断window.XMLHttpRequest属性而不是window.ActiveXObject,是因为在IE7+中也开始和AJAX标准靠拢支持XMLHttpRequest,并且现在用IE7+的人越来越多。

   

    在上述代码中,window.XMLHttpRequest返回的是一个对象或者null,if语句会把调用结果转换成ture或者false。

 

    if (xhr)语句判断xhr对象是否已经被创建,如果没有则会alert一个提示框说明浏览器不支持AJAX。

 

    如果xhr对象被创建,则这里需要三步来完成和服务器的数据交互:    

  1. xhr.onreadystatechange = method();设置xhr对象的onreadystatechange事件监听函数,每当xhr.readyState属性值发生变化时,就会触发该事件。readyState属性值会从0-4,所以method函数一共可以被触发5次。
  2. xhr.open("", url, true);该方法做向Server发送请求的参数准备,第一个参数中说明HTTP请求的方法,"GET","POST"或者"HEAD",第二个参数请求的URL,相当于FORM表单提交中的action属性,第三个参数说明method的调用是同步(false)还是异步(true)。 若是同步,则在send方法后等待服务器的响应完成才能进行操作,在等待期间浏览器不能响应用户输入,若是异步,则浏览器继续响应用户输入,同时后台等待服务器的响应。建议尽量使用异步,例如在用户填写表单验证的时候,用户填写的同时,浏览器在后台进行与服务器的表单验证,此时不会打断用户的输入,如果某个表单字段验证失败,则用户可以马上得到通知,这样就大大节省了用户的时间,也降低了Server的负载,因为Server不必重新返回整个页面,而只要进行验证并且返回验证信息。
  3. xhr.send(null);发送上面创建的请求,如果在步骤2中设置的是POST方式,则send方法需要一个参数指明post 的发送参数。

    xhr.readyState属性==4代表了和服务器交互已经完成。

 

    xhr.status则说明了从服务器返回的响应中的状态码,熟悉HTTP协议的人都知道code是200时代表正常响应(404代表请求的url资源不存在),这时就可以利用xhr对象的方法处理从Server返回的数据了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值