原生js ajax

var ajax = {
    // 使用原生js 封装ajax
    // 兼容xhr对象
    createXHR: function () {
        if (typeof XMLHttpRequest != "undefined") { // IE6浏览器
            return new XMLHttpRequest();
        } else if (typeof ActiveXObject != "undefined") {   // IE6浏览器
            var version = [
                "MSXML2.XMLHttp.6.0",
                "MSXML2.XMLHttp.3.0",
                "MSXML2.XMLHttp"
            ];
            for (var i = 0; i < version.length; i++) {
                try {
                    return new ActiveXObject(version[i]);
                } catch (e) {
                    //跳过
                }
            }
        } else {
            throw new Error("您的系统或浏览器不支持XHR对象!");
        }
    },
    // 转义字符
    params: function (data) {
        var arr = [];
        for (var i in data) {
            arr.push(encodeURIComponent(i) + "=" + encodeURIComponent(data[i]));
            //arr.push(i + "=" + (data[i]));
        }
        return arr.join("&");
    },
    // 封装ajax
    sendAjax: function (obj) {
        var xhr = this.createXHR();
        obj.url = obj.url + "?rand=" + Math.random(); // 清除缓存
        //obj.data = this.params(obj.data);      // 转义字符串
        if (obj.method === "get") {      // 判断使用的是否是get方式发送
            obj.url += obj.url.indexOf("?") == "-1" ? "?" + this.params(obj.data) : "&" + this.params(obj.data);  //以字符串的方式发送参数
        }
        // 异步
        if (obj.async === true) {
            // 异步的时候需要触发onreadystatechange事件
            xhr.onreadystatechange = function () {
                // 执行完成
                if (xhr.readyState == 4) {
                    callBack();
                }
            }
        }
        xhr.open(obj.method, obj.url, obj.async);  // false是同步 true是异步 // "demo.php?rand="+Math.random()+"&name=ga&ga",
        if (obj.method === "post") {
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.send(JSON.stringify(obj.data));  //json字符串的方式发送参数
        } else {
            xhr.send(null);
        }
        // xhr.abort(); // 取消异步请求
        // 同步
        if (obj.async === false) {
            callBack();
        }
        // 返回数据
        function callBack() {
            // 判断是否返回正确
            if (xhr.status == 200) {
                obj.success(xhr.responseText);
            } else {
                obj.Error("获取数据失败,错误代号为:" + xhr.status + "错误信息为:" + xhr.statusText);
            }
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值