AJAX 的原始写法

(1)什么是ajax?

         (asynchronousjavascript and xml)异步的javascript和xml,为了解决传统的web应用"等待-响应-等待"的弊端而创建的一种技术。

     该技术的实质是,利用浏览器内置的一个特殊的对象(XMLHttpRequest,该对象属于BOM模型)异步地向服务器发送请求,服务器

     送回部分的数据(xml或者text的形式),在浏览器端,可以使用这些数据部分更新页面。在整个过程当中,浏览器无刷新。

 

 

(2)ajax对象

                   ajax对象没有标准化,要获得该对象,需要区分浏览器。

                     

                var xmlhttprequest =null;
           if(window.XMLHttpRequest){
                 //非ie浏览器
                 xmlhttprequest = newXMLHttpRequest();
           }else{
                 //ie浏览器
                 xmlhttprequest = newActiveXObject('Microsoft.XMLHttp');
           }


                   ajax对象的属性:

                            onreadystatechange:注册监听器(即给ajax对象绑订一个事件处理函数)

                 responseText:获得服务器返回的文本。

                 responseXML:获得服务器返回的xml数据。

                 readyState:ajax在与服务器进行通讯时的状态值,

                 一共有5个,分别是0,1,2,3,4。当值为4时,表示

                 ajax对象已经获得了服务器返回的所有的数据。

                 此时,才可以使用responseText,responseXML

                 获得服务器返回的数据。

                 status:获得状态码

(3)编程

               方式一: get请求

                 a、,获得ajax对象

                 b、使用ajax对象发送请求

                      //open(请求方式,请求地址,同步还是异步);

                      //true:异步,ajax对象发送请求的同时,用户可以对当前页面做其它的操作。

                      //false:同步,ajax对象发送请求的同时,会锁定

                      //当前页面,用户只能等待服务器的响应。

                      xhr.open('get','check_username.do?username=zs',true);

                      //注册一个监听器

                      xhr.onreadystatechange=f1;

                      //请求参数要添加到请求地址后面。

                      xhr.send(null);

                 c、 服务器处理请求,只需要返回部分的数据给客户端。

                 d、在监听器当中,编写相应的处理代码

                    

  <span style="white-space:pre">		</span>     functionf1(){
                            //只有readyState等于4,xhr才获得了服务器返回的所有的数据
                            if(xhr.readyState== 4){
                                  //获得服务器返回的数据
                                  vartxt = xhr.responseText;  //或者responseXML
                                  //dom操作:更新页面
                                  ...
                            }
                      }

           方式二: post请求

                 a、获得ajax对象

                 b、发送请求

                      xhr.open('post','check_username.do',true);

                      //post请求,要将请求参数放到send方法里面。

                      //默认情况下,xhr对象生成的请求数据包

                      //没有content-type消息头,需要使用

                      //setRequestHeader添加这样一个消息头。

                      xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');

                      xhr.onreadystatechange=f1;

                      xhr.send("username=zs");

 

例子:

function a(){
<span style="white-space:pre">	</span>//获得ajax对象
   <span style="white-space:pre">	</span>var xmlhttprequest;
   <span style="white-space:pre">	</span>if(window.XMLHttpRequest){
        <span style="white-space:pre">	</span>//针对FireFox,Mozillar,Opera,Safari,IE7,IE8 
       <span style="white-space:pre">		</span>xmlhttprequest = new XMLHttpRequest();
       <span style="white-space:pre">		</span>if(xmlhttprequest.overrideMineType){
          <span style="white-space:pre">	</span>       //针对某些特定版本的mozillar浏览器的BUG进行修正 
           <span style="white-space:pre">	</span>     xmlhttprequest.overrideMineType("text/xml");
      <span style="white-space:pre">	</span> <span style="white-space:pre">	</span>}
   <span style="white-space:pre">	</span>}else if (window.ActiveXObject) {
          //针对IE
       <span style="white-space:pre">		</span>var activeName =["XSXML2.XMLHTTP","Microsoft.XMLHTTP"];
      <span style="white-space:pre">		</span>for (i = 0; i < activeName.length; i++) {
            <span style="white-space:pre">	</span>    try {
           <span style="white-space:pre">		</span>//取出一个控件名进行创建,如果创建成功就终止循环 
                 <span style="white-space:pre">	</span>//如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建
               <span style="white-space:pre">	</span> <span style="white-space:pre">	</span>xmlhttprequest = newActiveXObject(activeName[i]);
                <span style="white-space:pre">	</span>break;
           <span style="white-space:pre">	</span>    } catch (e) {
               
                    }
                }
        }
   if (xmlhttprequest === undefined || xmlhttprequest === null) {
       alert("xmlhttprequest对象创建失败!");
   }else{
       this.xmlhttp = xmlhttprequest;
}
 
<span style="white-space:pre">			</span>//发请求
                       var uri ='check_username.do?username=' + $F('username');
                       xhr.open('get',encodeURI(uri),true);
                       //注册监听器(绑订一个事件处理函数)
                       xhr.onreadystatechange=function(){
                            //只有ajax对象的readyState的值为4的时候,
                            //才能够正确地获得服务器返回的数据。
                            if(xhr.readyState ==4){
                                  //状态码是200,表示服务器处理正确。
                                  if(xhr.status== 200){
                                       //获得服务器返回的文本
                                       var txt =xhr.responseText;
                                       //dom操作
                                       $('username_msg').innerHTML= txt;
                                  }else{
                                       $('username_msg').innerHTML= '验证出错';
                                  }
                            }else{
                                  //xhr的readyState属性值是0,1,2,3
                                  //即xhr对象正与服务器进行通讯
                                  $('username_msg').innerHTML= '正在验证...';
                            }
                       }
                       //如果是get请求,请求参数要添加到请求地址后面
                       xhr.send(null);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值