自用的简单封装ajax,试用初学者

(function (window) {
    //避免污染全局变量
    function ajax(options) {
        var init = {
            type: 'get',
            url: "",
            data: {},
            async: true,
            success: function (txt) {
            },
            error: function () {
            },
            cache: true,
            beforeSend: function () {
            },
            complete: function () {
            }
        };
        options = merge(init, options);
        options.data = hb(options.data);
        var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
        //用一个变量来保存是否是post提交方式  值为布尔值
        var is_post = /^post$/i.test(options.type);
        //来判断是否需要处理url get方式的data需要加到url中
        if (!is_post) {
            //没有考虑到url可能已经有参数
            //优先级的问题 &的问题
            options.url += (options.url.indexOf('?') > -1 ? "&" : '?') + options.data;
            //处理缓存 是否加上时间戳
            options.url += options.cache ? "" : '&__time__=' + new Date().getTime();
        }
        xhr.open(options.type, options.url, options.async);
        //开始动画
        options.beforeSend();
        //设置头文件
        if (is_post) {
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        }
        xhr.send(options.data);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {

                if (xhr.status == 200) {
                    //提供xhr的使用权限  方便在使用时可以获取xhr的其他属性
                    options.success(xhr.responseText, xhr);
//                    complete();
                } else {
                    options.error(xhr.status, xhr);
                }
                options.complete();
            }
        }

    }
    function merge(init, add) {
        for (var key in add) {
            if (key in init) {
                init[key] = add[key];
            }
        }
        return init;
    }
    function hb(obj) {
        var str = "";
        for(var key in obj){
            str+= key+'='+obj[key]+'&';
        }
        return str;
    }
    window.ajax=ajax;
})(window);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值