ajax封装

export {
    $ajax,
    $get,
    $post
}

/**
 * @param {object} requestObject
 * method
 * url
 * data
 * success
 * error
 */
function $ajax(){
    //a1是Ajax(...arguments)的一个实例
    var a1 = new Ajax(...arguments);
    a1.init();
    a1.ajax();
}


//采用get方式提交
function $get(){  
    //将对象中的数据和提交方式get进行合并
    //...是展开运算符,将对象中的数据展开
    var argus = Object.assign({"method": "get"}, ...arguments);   
    // Ajax(argus)是一个构造函数,a1是他的一个实例
    var a1 = new Ajax(argus);
    a1.init();
    a1.ajax();
}

//采用post方式提交
function $post(){
    //将对象中的数据和提交方式post进行合并
    var argus = Object.assign({"method": "post"}, ...arguments);
    var a1 = new Ajax(argus);
    //声明一个ajax对象(兼容问题)
    a1.init();
    //open/send/等待数据响应
    a1.ajax();
}


//ES6语法:语法糖(构造函数)
class Ajax{
    //设置属性
    constructor({method = 'get', url, data, success, error}){
        this.method = method;
        this.url = url;
        this.data = data;
        this.success = success;
        this.error = error;
    }


//声明一个ajax对象(兼容问题)
init(){
    var xhr = null;
    try{
        xhr = new XMLHttpRequest();
    }catch(error){
        console.log(error);
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xhr;
}


ajax(){
    //1、生成ajax对象
    var xhr = this.init();

    //2、3、判断是否有数据存在(open/send)
    var querystring = "";
    if(this.data){
        //转成querystring
        querystring = this.querystring(this.data);
    }
    if(this.method == "get"){
        xhr.open(this.method, this.url + "?" + querystring, true);
        xhr.send();
    }else{
        xhr.open(this.method, this.url, true);
        //设置请求访问头
        xhr.setRequestHeader('content-type', "application/x-www-form-urlencoded");
        xhr.send(querystring);
    }
    
    //4.等待数据相应
    xhr.onreadystatechange = () => {
        if(xhr.readyState == 4){
            // if(xhr.status == 200){
                //你向ajax后台的程序发送xmlhttp请求的时候,
                // 后台程序接到请求会进行处理,处理结束后,可以返回一串数据给前台,这个就是responseText.
            //     success && success(xhr.responseText);
            // }else{
            //     error && error("error:" + xhr.status);
            // }

            xhr.status == 200 ? this.success && this.success(xhr.responseText) : this.error && this.error("error:" + xhr.status);
            
        }
    }
}
//将拼接的过程写成一个函数,向函数dataObj()里面传递一个形参
querystring(dataObj){
    var str = '';
    for(var attr in dataObj){
        str += `${attr}=${dataObj[attr]}&`;
    }
    //最后拼接的一个没有&
    return str.substring(0, str.length - 1);

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值