JavaScript网络请求工具库AjaxTool.js

(function () {
    function AjaxTool() {}
    AjaxTool.ajaxRequest = function(params,successCallback, failedCallback){
        // 1. 获取参数
        var requestType = params['requestType'] || 'get';    //请求方式
        var url = params['url'];    // 请求路径
        var paramObj = params['paramObj'];  // 传递参数
        var timeOut = params['timeOut'] || 0;    // 请求时长
        // 2. 发送请求
        var xhr = new XMLHttpRequest();
        // 判断
        if(requestType.toLowerCase()=== 'get'){
            // get 请求
            // 使用encodeURI 函数可把字符串作为 URI 进行编码。增加健壮性
            var codeUrl = encodeURI(url+'?'+getStrWithObject(paramObj));
            xhr.open('get',codeUrl,true);
            xhr.send();
        }else if(requestType.toLowerCase()=== 'post'){
            // post 请求
            var codeParam = encodeURI(getStrWithObject(paramObj));
            xhr.open('post',url,true);
            // 设置请求头
            xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
            xhr.send(codeParam);
        }
        xhr.addEventListener('readystatechange',function (ev) {
            if (xhr.readyState === 4){
                if (xhr.status === 200){
                    // 请求成功
                    successCallback && successCallback(xhr);
                    // 清除定时器
                    clearTimeout(timer);
                }else{
                    // 请求失败
                    failedCallback && failedCallback(xhr);
                }
            }
            // 0代表不限制请求时长
            var timer =null;
            if (timeOut > 0){
                timer = setTimeout(function () {
                    // 取消请求
                    xhr.abort();
                },timeOut);
            }
        })
    };

    /**
     * 把对象转换为拼接字符串
     * @param {Object}paramObj
     */
    function getStrWithObject(paramObj){
        var resArr = [];
        // 1. 转化对象
        for (var key in paramObj){
            var str = key + '=' + paramObj[key];
            resArr.push(str);
        }
        // 2. 拼接时间戳
        resArr.push('random='+getRandomStr());
        // 3. 数组转成字符串
        return resArr.join('&');
    }

    /**
     * 生成随机时间戳
     * @returns {number}
     */
    function getRandomStr(){
        return Math.random() + (new Date().getTime());
    }
    window.AjaxTool = AjaxTool;
})(window);
发布了270 篇原创文章 · 获赞 123 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/KaiSarH/article/details/104544024