手写ajax

400 阅读1分钟

躲避坑

不做兼容性处理(即不考虑运行的环境问题),使用new XMLHTTPRequest()进行创建对象,但是这个创建方式在IE6中不支持,所以就出现Microsoft设置的插件,必须使用如下方式进行创建这个xhr请求对象。

/**
    正常创建的方式
    var OAjax = new XMLHttpRequest();
*/
// IE6
var oAjax = null;
if (window.XMLHttpRequest){
    oAjax = new XMLHttpRequest();
}else{
    oAjax = new ActiveXObjext("Microsoft.XMLHttpRequest");
}

创建方式

刚才的创建方式为:

  • 第一步: 创建xhr的请求对象。
  • 第二部:使用oAjax.open('GET',URL,是否异步); //此步骤为连接服务器 --- 同步:具备同时进行。异步:有先后顺序(把大象装进冰箱的过程)。
  • 第三步:发送请求。oAjax.send();
  • 第四部: 接受返回。
// 整个过程进行封装
function ajax(url,success,failed){
    /**
    正常创建的方式
    var OAjax = new XMLHttpRequest();
    */
    // IE6
    var oAjax = null;
    if (window.XMLHttpRequest){
        oAjax = new XMLHttpRequest();
    }else{
        oAjax = new ActiveXObjext("Microsoft.XMLHttpRequest");
    }
    
    oAjax.open('GET',url,true);
    oAjax.send();
    
    oAjax.onreadystatechange = function(){
        //使用oAjax.readyState 的值来判断返回的状态,返回的状态为0,1,2,3,4的过程。当OAjax.readyState == 4的情况下,意味着第一步到第四步全部完成。
        // 使用oAjax.status == 200的情况下表示返回成功。
        if(oAjax.readystate == 4){
            if(oAjax.status == 200){
                console.log("返回成功");//在浏览器开发情况下查看(F12)
                console.log("返回的信息"+oAjax.responseText);//oAjax.responseText是从服务器进行返回的信息
                // 返回成功执行的函数处理
                success(oAjax.responseText){ //一般情况下写成success(data),为了方便使用操作返回的数据
                //对返回的oAjax.responseTest的数据进行操作
                    
                };
            }else{
                console.log("返回失败");
                // 如果返回失败
                if(failed){
                    // 当传入错误函数的参的时候进行执行
                    failed();
                }
            }
        }
    }
}