之前写的jq的公共方法,一些常用内容合集

之前写的,使用jq作为基础写的common.js,里面包含了一些常用方法,函数,有详细的解释

/**
 * @author:yueziming
 * @version:1.0
 * @description 为了方便书写统一写公共方法,用来写活动、静态页面等
 */
window.baseUrl = "";
if (window.location.hostname == 'localhost') {
    // baseURL = 'http://172.16.1.1/TbWebApi/api';
    window.baseUrl = 'http://testapi.aaaa.com/api';
 } else if (window.location.hostname == '172.16.1.1') {
    window.baseUrl = 'http://172.16.1.2/api';
 } else if (window.location.hostname == 'http://tbabc.aaaa.com') {
    window.baseUrl = 'http://testapi.aaaa.com/api';
 } else {
    window.baseUrl = 'http://api.aaaa.com/api';
 }

var Common = {
    //公共ajax方法
    /**
     * @arg url:去除公共地址后后API地址
     * @arg type:请求类型,默认为post
     * @arg data:用于请求的数据
     * @arg callback:回调函数
     */
    ajax: function (url, type, data, callback) {
        var self = this;
        var myUrl = window.baseUrl + url;
        Common.ajaxLoading();
        $.ajax({
            url: myUrl,
            data: data,
            type: type || "post",
            dataType: 'json',
            //获取令牌,每次请求带上
            beforeSend: function (request) {
                var token = self.getSession("token");
                if (token) {
                    request.setRequestHeader("X-CSRF-TOKEN", token);
                }
            },
            success: function (res) {
                Common.ajaxLoadingStop();
                callback(res);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                console.log(XMLHttpRequest.status);
                console.log(XMLHttpRequest.readyState);
                console.log(textStatus);
                Common.validateAjaxStatus(XMLHttpRequest.status);
                Common.ajaxLoadingStop();
            }
        });
    },
    /**
     * @desc 请求状态码字典
     */
    ajaxStatusDictionary:{
        status:{
            //请求成功
            "201":"对象创建成功并返回相应资源数据。",
            "202":"接受请求,但无法立即完成创建行为,比如其中涉及到一个需要花费若干小时才能完成的任务。返回的实体中应该包含当前状态的信息,以及指向处理状态监视器或状态预测的指针,以便客户端能够获取最新状态。",
            "204":"请求执行成功,不返回相应资源数据,如 PATCH , DELETE 成功。",
            //重定向
            "301":"被请求的资源已永久移动到新位置。",
            "302":"请求的资源现在临时从不同的 URI 响应请求。",
            "303":"对应当前请求的响应可以在另一个 URI 上被找到,客户端应该使用 GET 方法进行请求。",
            "307":"对应当前请求的响应可以在另一个 URI 上被找到,客户端应该保持原有的请求方法进行请求。",
            //条件请求
            "304":"资源自从上次请求后没有再次发生变化,主要使用场景在于实现数据缓存。",
            "409":"请求操作和资源的当前状态存在冲突。主要使用场景在于实现并发控制。",
            "412":"服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。主要使用场景在于实现并发控制。",
            //客户端错误
            "400":"请求体包含语法错误。",
            "401":"需要验证用户身份。",
            "403":"服务器拒绝执行。",
            "404":"找不到目标资源。",
            "405":"不允许执行目标方法,响应中应该带有 Allow 头,内容为对该资源有效的 HTTP 方法。",
            "406":"服务器不支持客户端请求的内容格式,但响应里会包含服务端能够给出的格式的数据。",
            "410":"被请求的资源已被删除。",
            "413":"POST 或者 PUT 请求的消息实体过大。",
            "415":"服务器不支持请求中提交的数据的格式。",
            "422":"请求格式正确,但是由于含有语义错误,无法响应。",
            "428":"要求先决条件,如果想要请求能成功必须满足一些预设的条件。",
            //服务端错误
            "500":"服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。",
            "501":"服务器不支持当前请求所需要的某个功能。",
            "502":"作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。",
            "503":"由于临时的服务器维护或者过载,服务器当前无法处理请求。"
        }
    },
    /**
     * @desc 打印错误原因
     */
    validateAjaxStatus:function (status) {
        console.log('网络异常状态码为:“'+status+'”<br//>请联系技术中心获取支持!<br//>详细错误原因为:'+this.ajaxStatusDictionary.status[status]);
    },
    /**
     * @name ajaxLoading
     * @desc ajax加载中样式
     */
    ajaxLoading: function () {
        var loadingHtml = '<div id="loading" class="spinner"><div class="spinner-container container1"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div><div class="spinner-container container2"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div><div class="spinner-container container3"><div class="circle1"></div><div class="circle2"></div><div class="circle3"></div><div class="circle4"></div></div>加载中</div>';
        $("body").append(loadingHtml);
    },
    /**
     * @name ajaxLoadingStop
     * @desc ajax加载完后移除加载样式
     */
    ajaxLoadingStop: function () {
        $("#loading").remove();
    },
    /**
     * @name tips提示
     * @desc 公共的消息提示,限定时间内消失,默认1秒钟
     * @param msg:需要提示的消息字符串
     * @param time:延迟多长时间开始消息消失
     */
    tips:function(msg,time){
        var endtime = time || 1000;
        var htmlstr = '<div id="tip"><div class="top">提示</div><div class="message">'+msg+'</div></div>';
        $("#tip").remove();
        $("body").append(htmlstr);
        var i = setTimeout(function(){
            $("#tip").fadeOut(1000);
        },endtime);
    },
    /**
     * @name setsession 设置sessionStorage
     * @desc 对sessionStorage的存的操作方法
     * @param key:sessionStorage的键
     * @param value:sessionStorage的值,可以为数字、字符,也可以为json对象
     */
    setSession:function(key,value){
        if(typeof value == 'object'){
            sessionStorage.setItem(key,JSON.stringify(value));
        }
        else{
            sessionStorage.setItem(key,value);
        }
    },
    /**
     * @name getSesssion 获取sessionStorage存储
     * @desc 对sessionStorage的取的操作方法
     * @param key:需要取值的键
     */
    getSession:function(key){
        try{
            var data = JSON.parse(sessionStorage.getItem(key));
        }catch(e){
            var data = sessionStorage.getItem(key);
        }
        return data;
    },
    /**
     * @desc 销毁sessionStorage
     */
    destorySessionstorage:function(key){
        sessionStorage.removeItem(key);
    },
    /**
     * @name getQuery 获取URL传参的值
     * @desc 获取URL传参的值且避免报错
     */
    getQuery:function(key){
        var url = location.search;
        var returnStr = '';
        var keyword = key + "=";
        if(keyword){
            try{
                returnStr = url.split(keyword)[1].split("&")[0]
            }
            catch(e){
                returnStr = '';
            }
        }
        return returnStr;
    },
    CookieClass: function () {
        var self = this;
        /**
         * 设定Cookie
         * @param name 添加Cookie的名称
         * @param value 添加Cookie的值
         * @param expiresHours 添加Cookie的过期时间(单位:小时)
         * @param path 添加Cookie的域
         */
        self.setCookie = function (name, value, expiresHours, path) {
            if (arguments.length == 1) {
                Quasar._setError(-1, 11, '函数缺少必要参数', 'CookieClass/setCookie()');
                return false;
            }
            if (arguments.length == 2) expiresHours = 0;
            if (arguments.length == 3) path = '/';
            var cookieString = name + "=" + encodeURI(value);
            // 判断是否设置过期时间
            if (expiresHours > 0) {
                var date = new Date();
                date.setTime(date.getTime() + expiresHours * 3600 * 1000);
                cookieString = cookieString + "; expires=" + date.toUTCString() + "; path=" + path;
            }
            document.cookie = cookieString;
        };
        //noinspection JSUnusedGlobalSymbols
        /**
         * 获取Cookie
         * @param name 获取Cookie的名称
         *
         * @returns string|null|boolean 返回Cookie的值,无对应name的Cookie则返回null
         */
        self.getCookie = function (name) {
            if (arguments.length <= 0) {
                Quasar._setError(-1, 11, '函数缺少必要参数', 'CookieClass/getCookie()');
                return false;
            }
            var strCookie = document.cookie;
            var arrCookie = strCookie.split("; ");
            for (var i = 0; i < arrCookie.length; i++) {
                var arr = arrCookie[i].split("=");
                if (arr[0] == name) return decodeURI(arr[1]);
            }
            return null;
        };
        //noinspection JSUnusedGlobalSymbols
        /**
         * 删除Cookie
         * @param name 删除Cookie的名称
         */
        self.delCookie = function (name) {
            if (arguments.length <= 0) {
                Quasar._setError(-1, 11, '函数缺少必要参数', 'CookieClass/delCookie()');
                return false;
            }
            var date = new Date();
            date.setTime(date.getTime() - 10000);
            document.cookie = name + "=''; expires=" + date.toUTCString();
        };
    },
    /**
     *  @desc 正则判断字符串是否正确
     */
    RegExpClass: function () {
        var self = this;
        /**
         *  @desc 验证字符串是否为空
         */
        self.IsNotEmpty = function (str) {
            if(str == '' || str == undefined){
                return false;
            }
            return true;
        };
        /**
         *  @desc 验证字符串是否为email
         */
        self.IsEmail = function (str) {
            var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.[\w-]+$/i;
            return emailReg.test(str);
        };
        /**
         *  @name Common.IsMobile 验证字符串是否为手机号码
         *  @param str:需要验证的手机号字符串
         *  @desc 这里验证的是大陆、香港、澳门的手机号
         */
        self.IsMobile = function (str) {
            var patrn = /^1[3|4|5|6|7|8|9][0-9]+\d{8}$|^([5|6|9])+\d{7}$|^[6]([8|6])+\d{5}$/; // 手机号码
            return patrn.test(str);
        };
        /**
         * @desc 验证字符串是否为电话或者传真
         */
        self.IsTel = function (str) {
            var patrn = /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
            return patrn.test(str);
        };
        /**
         * @desc 验证字符串是否为汉字
         */
        self.IsCN = function (str) {
            var p = /^[\u4e00-\u9fa5]+$/;
            return p.test(str);
        };
        /**
         * @desc 验证字符串是否为数字
         */
        self.IsNum = function (str) {
            var p = /^\d+$/;
            return p.test(str);
        };
        /**
         * @desc 验证字符串是否含有特殊字符
         */
        self.IsUnSymbols = function (str) {
            var p = /^[\u4e00-\u9fa5\w \.,(),ê?。¡ê(ꡧ)ê?]+$/;
            return p.test(str);
        };
    },
    /**
     * 金钱处理对象
    * {
    *       toThousands: MoneyUtils.toThousands,
    *       encodeMoney: MoneyUtils.encodeMoney,
    *       decodeMoney: MoneyUtils.decodeMoney,
    *       encodeRate: MoneyUtils.encodeRate,
    *       decodeRate: MoneyUtils.decodeRate,
    *       accAdd: MoneyUtils.accAdd,
    *       accDiv: MoneyUtils.accDiv,
    *       accMul: MoneyUtils.accMul
    *       }
    * }
     */
    MoneyUtils: function () {
        var self = this;
        //对金额进行千位符的格式化
        self.toThousands = function (count) {
            var temp1;
            var temp2 = 0;
            try {
                temp1 = count.toString().split(".")[0];
                temp2 = count.toString().split(".")[1];
                var num = (temp1 || 0).toString(), result = '';
                while (num.length > 3) {
                    result = ',' + num.slice(-3) + result;
                    num = num.slice(0, num.length - 3);
                }
                if (num) {
                    if (temp2 != undefined) {
                        result = num + result + "." + temp2;
                    } else {
                        result = num + result;
                    }
                }
            } catch (e) {
                temp1 = count;
                var num = (temp1 || 0).toString(), result = '';
                while (num.length > 3) {
                    result = ',' + num.slice(-3) + result;
                    num = num.slice(0, num.length - 3);
                }
                if (num) {
                    result = num + result;
                }
            }
            return result;
        };
        //处理一下,解决js浮点型运算的问题。
        //将数字转换成xxx万 精确到分,小数点后6位
        self.encodeMoney = function (count) {
            var self = this;
            var money = self.accDiv(Number(count), 10000);
            var t;
            try {
                t = money.toString().split(".")[1].length;
            } catch (e) {
                t = 0;
            }
            if (t > 6) {
                //2016.4.13 增加toFixed()函数去掉自动补零的功能
                for (var i = 6; i > 0; i++) {
                    var num = money.toString().split(".")[1].substring(i - 1, i)
                    if (num == 0) {
                        return money.toFixed(i - 1);
                    } else {
                        return money.toFixed(i);
                    }
                }
                //return money.toFixed(6);
            } else {
                return money;
            }
        };
        //将xx万转换成数字
        self.decodeMoney = function (count) {
            var self = this;
            var p_money = count.toString().replace(",", "");
            return self.accMul(Number(p_money), 10000);
        };
        //处理利率问题
        //把数字转换成千分之多少
        self.encodeRate = function (rate) {
            return 100 * (Number(rate) * 100) / 100;
        };
        /**
         * @desc 把千分之多少转换成数字
         */
        self.decodeRate = function (rate) {
            return (Number(rate) * 100) / (100 * 100);
        };
        //添加浮点型的加减乘除。解决js浮点型的bug
        //加法函数,用来得到精确的加法结果
        //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
        //调用:accAdd(arg1,arg2)
        //返回值:arg1加上arg2的精确结果
        self.accAdd = function (arg1, arg2) {
            var r1, r2, m;
            try {
                r1 = arg1.toString().split(".")[1].length
            } catch (e) {
                r1 = 0
            }
            try {
                r2 = arg2.toString().split(".")[1].length
            } catch (e) {
                r2 = 0
            }
            m = Math.pow(10, Math.max(r1, r2))
            return (arg1 * m + arg2 * m) / m
        };
        //除法函数,用来得到精确的除法结果
        //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
        //调用:accDiv(arg1,arg2)
        //返回值:arg1除以arg2的精确结果
        self.accDiv = function (arg1, arg2) {
            var t1 = 0, t2 = 0, r1, r2;
            try {
                t1 = arg1.toString().split(".")[1].length
            } catch (e) {
            }
            try {
                t2 = arg2.toString().split(".")[1].length
            } catch (e) {
            }
            with (Math) {
                r1 = Number(arg1.toString().replace(".", ""))
                r2 = Number(arg2.toString().replace(".", ""))
                return (r1 / r2) * pow(10, t2 - t1);
            }
        };
        //乘法函数,用来得到精确的乘法结果
        //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
        //调用:accMul(arg1,arg2)
        //返回值:arg1乘以arg2的精确结果
        self.accMul = function (arg1, arg2) {
            var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
            try {
                m += s1.split(".")[1].length
            } catch (e) {
            }
            try {
                m += s2.split(".")[1].length
            } catch (e) {
            }
            return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
        };
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容