之前寫的公黑,使用jq作為基礎(chǔ)寫的common.js邑商,里面包含了一些常用方法,函數(shù)凡蚜,有詳細的解釋
/**
* @author:yueziming
* @version:1.0
* @description 為了方便書寫統(tǒng)一寫公共方法,用來寫活動人断、靜態(tài)頁面等
*/
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:用于請求的數(shù)據(jù)
* @arg callback:回調(diào)函數(shù)
*/
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 請求狀態(tài)碼字典
*/
ajaxStatusDictionary:{
status:{
//請求成功
"201":"對象創(chuàng)建成功并返回相應(yīng)資源數(shù)據(jù)恶迈。",
"202":"接受請求,但無法立即完成創(chuàng)建行為芹务,比如其中涉及到一個需要花費若干小時才能完成的任務(wù)蝉绷。返回的實體中應(yīng)該包含當前狀態(tài)的信息,以及指向處理狀態(tài)監(jiān)視器或狀態(tài)預(yù)測的指針枣抱,以便客戶端能夠獲取最新狀態(tài)熔吗。",
"204":"請求執(zhí)行成功,不返回相應(yīng)資源數(shù)據(jù)佳晶,如 PATCH 桅狠, DELETE 成功。",
//重定向
"301":"被請求的資源已永久移動到新位置。",
"302":"請求的資源現(xiàn)在臨時從不同的 URI 響應(yīng)請求中跌。",
"303":"對應(yīng)當前請求的響應(yīng)可以在另一個 URI 上被找到咨堤,客戶端應(yīng)該使用 GET 方法進行請求。",
"307":"對應(yīng)當前請求的響應(yīng)可以在另一個 URI 上被找到漩符,客戶端應(yīng)該保持原有的請求方法進行請求一喘。",
//條件請求
"304":"資源自從上次請求后沒有再次發(fā)生變化,主要使用場景在于實現(xiàn)數(shù)據(jù)緩存嗜暴。",
"409":"請求操作和資源的當前狀態(tài)存在沖突凸克。主要使用場景在于實現(xiàn)并發(fā)控制。",
"412":"服務(wù)器在驗證在請求的頭字段中給出先決條件時闷沥,沒能滿足其中的一個或多個萎战。主要使用場景在于實現(xiàn)并發(fā)控制。",
//客戶端錯誤
"400":"請求體包含語法錯誤舆逃。",
"401":"需要驗證用戶身份蚂维。",
"403":"服務(wù)器拒絕執(zhí)行。",
"404":"找不到目標資源路狮。",
"405":"不允許執(zhí)行目標方法虫啥,響應(yīng)中應(yīng)該帶有 Allow 頭,內(nèi)容為對該資源有效的 HTTP 方法览祖。",
"406":"服務(wù)器不支持客戶端請求的內(nèi)容格式孝鹊,但響應(yīng)里會包含服務(wù)端能夠給出的格式的數(shù)據(jù)炊琉。",
"410":"被請求的資源已被刪除展蒂。",
"413":"POST 或者 PUT 請求的消息實體過大。",
"415":"服務(wù)器不支持請求中提交的數(shù)據(jù)的格式苔咪。",
"422":"請求格式正確锰悼,但是由于含有語義錯誤,無法響應(yīng)团赏。",
"428":"要求先決條件箕般,如果想要請求能成功必須滿足一些預(yù)設(shè)的條件。",
//服務(wù)端錯誤
"500":"服務(wù)器遇到了一個未曾預(yù)料的狀況舔清,導(dǎo)致了它無法完成對請求的處理丝里。",
"501":"服務(wù)器不支持當前請求所需要的某個功能。",
"502":"作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請求時体谒,從上游服務(wù)器接收到無效的響應(yīng)杯聚。",
"503":"由于臨時的服務(wù)器維護或者過載,服務(wù)器當前無法處理請求抒痒。"
}
},
/**
* @desc 打印錯誤原因
*/
validateAjaxStatus:function (status) {
console.log('網(wǎng)絡(luò)異常狀態(tài)碼為:“'+status+'”<br//>請聯(lián)系技術(shù)中心獲取支持幌绍!<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 公共的消息提示,限定時間內(nèi)消失,默認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 設(shè)置sessionStorage
* @desc 對sessionStorage的存的操作方法
* @param key:sessionStorage的鍵
* @param value:sessionStorage的值,可以為數(shù)字傀广、字符颁独,也可以為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;
/**
* 設(shè)定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, '函數(shù)缺少必要參數(shù)', 'CookieClass/setCookie()');
return false;
}
if (arguments.length == 2) expiresHours = 0;
if (arguments.length == 3) path = '/';
var cookieString = name + "=" + encodeURI(value);
// 判斷是否設(shè)置過期時間
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的值,無對應(yīng)name的Cookie則返回null
*/
self.getCookie = function (name) {
if (arguments.length <= 0) {
Quasar._setError(-1, 11, '函數(shù)缺少必要參數(shù)', '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, '函數(shù)缺少必要參數(shù)', '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 驗證字符串是否為數(shù)字
*/
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浮點型運算的問題。
//將數(shù)字轉(zhuǎn)換成xxx萬 精確到分寂汇,小數(shù)點后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()函數(shù)去掉自動補零的功能
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萬轉(zhuǎn)換成數(shù)字
self.decodeMoney = function (count) {
var self = this;
var p_money = count.toString().replace(",", "");
return self.accMul(Number(p_money), 10000);
};
//處理利率問題
//把數(shù)字轉(zhuǎn)換成千分之多少
self.encodeRate = function (rate) {
return 100 * (Number(rate) * 100) / 100;
};
/**
* @desc 把千分之多少轉(zhuǎn)換成數(shù)字
*/
self.decodeRate = function (rate) {
return (Number(rate) * 100) / (100 * 100);
};
//添加浮點型的加減乘除病往。解決js浮點型的bug
//加法函數(shù),用來得到精確的加法結(jié)果
//說明:javascript的加法結(jié)果會有誤差骄瓣,在兩個浮點數(shù)相加的時候會比較明顯停巷。這個函數(shù)返回較為精確的加法結(jié)果。
//調(diào)用:accAdd(arg1,arg2)
//返回值:arg1加上arg2的精確結(jié)果
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
};
//除法函數(shù)榕栏,用來得到精確的除法結(jié)果
//說明:javascript的除法結(jié)果會有誤差畔勤,在兩個浮點數(shù)相除的時候會比較明顯。這個函數(shù)返回較為精確的除法結(jié)果扒磁。
//調(diào)用:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精確結(jié)果
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);
}
};
//乘法函數(shù)庆揪,用來得到精確的乘法結(jié)果
//說明:javascript的乘法結(jié)果會有誤差,在兩個浮點數(shù)相乘的時候會比較明顯妨托。這個函數(shù)返回較為精確的乘法結(jié)果缸榛。
//調(diào)用:accMul(arg1,arg2)
//返回值:arg1乘以arg2的精確結(jié)果
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)
};
}
}