仿jq封装原生ajax

 /* 封装ajax函数
 2  * @param {string}opt.type http连接的方式,包括POST和GET两种方式
 3  * @param {string}opt.url 发送请求的url
 4  * @param {boolean}opt.async 是否为异步请求,true为异步的,false为同步的
 5  * @param {object}opt.data 发送的参数,格式为对象类型
 6  * @param {function}opt.success ajax发送并接收成功调用的回调函数
 7  */
    function ajax(opt) {
        opt = opt || {};
        opt.type = opt.type.toUpperCase() || 'GET';
        opt.url = opt.url || '';
        opt.async = opt.async || true;
        opt.data = opt.data || null;
        opt.success = opt.success || function () {
        };
        var xmlHttp = null;
        if (XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
    else
        {
            xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
        }
        var params = [];
        for (var key in opt.data) {
            params.push(key + '=' + opt.data[key]);
        }
        var postData = params.join('&');
        if (opt.type.toUpperCase() === 'POST') {
            xmlHttp.open(opt.type, opt.url, opt.async);
             // 如果使用formdata 上传文件 不设置请求头
            if(opt.contentType !== 'multipart/form-data'){
                xmlHttp.setRequestHeader('Content-Type', opt.contentType||'application/x-www-form-urlencoded;charset=utf-8');
            }
            xmlHttp.send(opt.data);
        }
    else
        if (opt.type.toUpperCase() === 'GET') {
            xmlHttp.open(opt.type, opt.url + '?' + postData, opt.async);
            xmlHttp.send(null);
        }
        xmlHttp.onreadystatechange = function () {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                opt.success(xmlHttp.responseText);
            }else{
                if (opt.error){
                    opt.error(xmlHttp.responseText);
                }
            }
        };
    }

调用示例:

 ajax({
                url:'http://www.tclass.net',
                type:"post",
                async:true,
                contentType:'multipart/form-data',
                data:{},
                success:function (res) {
                    console.log(res)
                }
            })

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值