ajax的封装

这是我整理的ajax的方法,有单独的get方法,post方法,也有ajax的完全封装
//  get  方法需要处理的是   路径和数据序列化
function get(url,data,callBack){
    var xhr = getXHR();
    if(!!data && data instanceof Function){
        callBack = data;
        data = undefined;
    }
    url = url + "?rand=" + new Date().getTime();
    if(!!data){
        url += "&" + serialize(data);
    }
    xhr.open("get",url);
    xhr.send();
    xhr.onreadystatechange = function(){
        // 这里是状态监听
        if(xhr.readyState ===4){
            if(xhr.status === 200){
                callBack(xhr.responseText);
            }else{
                callBack("请求错误    错误提示:" + xhr.status + "  ; 错误原因:" + xhr.statusText);
            }
        }
    }
}

// post 方法处理的是   数据序列化,不考虑路径,需要注意的是,这需要请求头信息,发送方法也不一样
function post(url,data,callBack){
    var xhr = getXHR();
    if(!!data && data instanceof Function){
        callBack = data;
        data = undefined;
    }
    data = !!data ? serialize(data) : null;
    xhr.open("post",url);
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    xhr.send(data);
    xhr.onreadystatechange=function(){
        if(xhr.readyState === 4){
            if(xhr.status === 200){
                callBack(xhr.responseText);
            }else{
                callBack("请求出现错误:错误提示" + xhr.status + ";错误原因:" + xhr.statusText);
            }
        }
    }
}
//    封装getJSON,  从后台获得   json  格式的数据


//  封装ajax完全版   这个是以对象的方式获取 例子如下:
/**
 * var obj = {
 *      type : "post",
 *      url : "ajax.php",
 *      data : {
 *          uname : "tom",
 *          age : 19
 *      },
 *      success : function(res){
 *          console.log(res);
 *      },
 *      error : function(res){
 *          console.log(res);
 *      }
 * }
 * ajax(obj);
 * 
*/
function ajax(param){
    if(!!param.data){
        param.data = serialize(param.data);
    }
    if(param.type.toLowerCase() === "get"){
        param.url += "?rand=" + new Date().getTime();
        if(!!param.data){
            param.url += "&" + param.data;
        }
    }
    var xhr = getXHR();
    xhr.open(param.type,param.url);
    if(param.type.toLowerCase() === "post"){
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlcoded");
        xhr.send(param.data);
    }else{
        xhr.send();
    }
    xhr.onreadystatechange = function(){
        if(xhr.readyState !=4) return ;
        if(xhr.status == 200){
            param.success(xhr.responseT);
        }else{
            if(!!param.error){
                param.error(new Error("请求出现错误:错误提示" + xhr.status + ";错误原因:" + xhr.statusText));
            }
        }
    }
}
// 获取xhr对象
function getXHR(){
    var xhr = null;
    if(!!window.XMLHttpRequest){
        xhr = new XMLHttpRequest();
    }else{
        xhr = ActiveXObject();
    }
    return xhr;
}
//  将参数data序列化
function serialize(obj){
    var paramArr = [];
    for (var key in obj) {
        paramArr.push(key + "=" + encodeURIComponent(obj[key]));
    }
    return paramArr.join("&");
}

以上代码仅供参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值