Ajax框架整合

我们知道,每次根据不同接口,写不同的Ajax是一件比较麻烦的事儿,但是又不逃避他们,那么该肿么办呢,下面给大家介绍一种整合框架,可以根据与不同接口去创建不同的Ajax

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    function ajax(option){
        var setting = {
            url:'',
            method:'',
            data:'',
            async:true,
            success:null,
            error:null,
            timeout:10000,
            hrader:null,
            dataType:'json'
        };
        //循环遍历传参
        for(var p in option){
            setting[p] = option[p]
        }
        //url后的数据处理
        var requestdata = '';
        if(typeof setting.data == 'object'){
            var arr = [];
            for(var p in setting.data){
                arr.push(p + '=' + setting.data[p]);
            }
            requestdata = arr.join('&');
        }else{
            requestdata = setCharset.data;
        }
        //异步处理
        var xhr;
        if(XMLHttpRequest){
            xhr = new XMLHttpRequest();
        }else{
            xhr = new ActiveXObject();
        }
        //get
        if(setting.method.toLocaleLowerCase() == 'get'){
            xhr.open(setting.method, setting.url +'?'+ requestdata, setting.async);
            addHeader();
            xhr.send();
        }else{//post
            xhr.open(setting.method, setting.url, setting.async);
            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            addHeader();
            xhr.send(requestdata);
        }
        //是否超时
        xhr.timeout = setting.timeout;
        xhr.ontimeout = function(){
            typeof setting.error == 'function' && setting.error('timer');
        };
        //报错
        xhr.onerror = function(){
            typeof setting.error == 'function' && setting.error(xhr.response);
        };
        //是否异步操作
        if(setting.async){
            xhr.onreadystatechange = function(){
                doResult();
            }
        }else{
            doResult();
        }
        //处理请求结果
        function doResult(){
            if(xhr.readyState == 4 && xhr.status == 200 && typeof setting.success == 'function');
            {
                switch (setting.dataType){
                    case 'json':
                        setting.success(JSON.parse(xhr.response));
                        break;
                    default :
                        setting.success(xhr.response);
                }
            }
        }

        //添加请求头
        function addHeader(){
            if(typeof setting.hrader == 'object'){
                for(var p in setting.header){
                    xhr.setRequestHeader(p, setting.header[p]);
                }
            }
        }
    }
    ajax({
        url:'http://apis.baidu.com/tianyiweather/basicforecast/weatherapi',
        method:'get',
        data:'area=101010100',
        dataType:'json',
        header:{'apikey':'1b9e66408b7e243dcc6c3e10ef6e94d5'},
        success:function(data){
            console.log(data);
        },
        error:function(data){
            console.log(data);
        }
    })
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值