小程序js常用工具及请求关键代码的封装

一个js常用工具及请求关键代码的封装随着时间变迁。

一  2017年 第一版web管理后台在用

   web后台管理页面用

/*** Created by hua on 2017/8/24.*/
var requestResult={success :0,failure:1,failureMsg:2
}jx={reqAjax:function (isSync,url,fnSuccess,fnFailure) {$.ajax({type: "post",dataType:"json",async: isSync||true,url: url,success: function (data) {console.log(data);if (data.code ==requestResult.success ){if ( jQuery.isFunction( fnSuccess ) ) {fnSuccess.call();}else{alert("操作成功。");}}else{if (data.code ==requestResult.failure){alert("操作失败!");}if (data.code ==requestResult.failureMsg){if (data.errMsg!=''){alert(data.errMsg);}else{alert("操作失败,返回信息异常!")}}if ( jQuery.isFunction( fnFailure ) ) {fnFailure.call();}}},error:function(err){alert("系统请求错误,请联系管理员!");}});},req:function (url,fnSuccess) {jx.reqAjax(false,url, fnSuccess,null);},createNativeRequest: function createRequest(){var xmlHttp;try{// Firefox, Opera 8.0+, SafarixmlHttp=new XMLHttpRequest();}catch (e){// Internet Explorertry{xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}catch (e){try{xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}catch (e){alert("您的浏览器不支持登陆!");return false;}}}return xmlHttp;},nativeReq:function (async,url,param,fuSccess,fuFail) {console.log('using native ajax.');var xmlhttp= jx.createNativeRequest();console.log('create native xmlhttp');console.log(xmlhttp);xmlhttp.open("POST",url,async||false);// 为空时同步xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");if (!async){xmlhttp.send(param);var result= xmlhttp.responseText;console.log(result);return result;}else{xmlhttp.onreadystatechange=function state_Change() {if (xmlhttp.readyState==4){// 4 = "loaded"if (xmlhttp.status==200) {if (fuSccess && typeof(fuSccess) == "function") {fuSccess();}}else{if (fuFail && typeof(fuFail) == "function") {fuFail();}}}};xmlhttp.send(param);}}};jxCookie={setCookie:function (name,value){   var Days = 7;var exp = new Date();exp.setTime(exp.getTime() + Days*24*60*60*1000);document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();},getCookie:function (name){var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");if(arr=document.cookie.match(reg))return unescape(arr[2]);elsereturn null;},delCookie:function (name){var exp = new Date();exp.setTime(exp.getTime() - 1);var cval=getCookie(name);if(cval!=null)document.cookie= name + "="+cval+";expires="+exp.toGMTString();}
}/**按钮等待进度   使用方法: jxProcess.run(butid, txtid, 1,30,'已发送成功(_sec_)')    说明:butid 和 txtid 为Input元素对象ID,1 代表每隔几秒刷新次数, 30代表等待30秒,最后的参数为等时间显示到按钮的字体动态显示参数 _sec_      **/
var jxProcess={cur:60,jqElemBut:undefined,jqElemTxt:undefined,normalButLabel:undefined,dyTimeLabel:undefined,t:undefined,startWait:function () {if (jxProcess.cur > 0){var label= jxProcess.dyTimeLabel.replace("_sec_",jxProcess.cur);jxProcess.cur--;jxProcess.jqElemBut.html(label);}else{jxProcess.runStop();}},getJqueryObjById:function(id){var _id="#"+id;return $(_id);},run:function (butId,txtId,timeSec,sumSec,dyTimeLabel) {var  $elemBut= jxProcess.getJqueryObjById(butId);var  $elemTxt=jxProcess.getJqueryObjById(txtId);$elemBut.attr("disabled",true);$elemTxt.attr("readonly",true);jxProcess.cur = sumSec||60;jxProcess.jqElemBut=$elemBut;jxProcess.jqElemTxt=$elemTxt;jxProcess.normalButLabel=$elemBut.html();jxProcess.dyTimeLabel=dyTimeLabel||'请耐心等待_sec_秒.'jxProcess.t  = window.setInterval('jxProcess.startWait()',timeSec*1000||1000);},runStop:function () {if (jxProcess.t!=undefined){jxProcess.jqElemBut.attr("disabled",false);if (jxProcess.jqElemTxt){jxProcess.jqElemTxt.attr("readonly",false);}jxProcess.jqElemBut.html(jxProcess.normalButLabel);window.clearInterval(jxProcess.t);console.log("clearInterval");jxProcess.t=undefined;}}}

 

二  2018年,微信小程序在使用,该项目了rc4算法加密了请求包。


//引用配置文件
const cfg = require('../config.js');//打印调试信息
function tag(obj,msg) {console.log(new Date());console.log("==========begin("+msg+")===========")try {console.log(obj);} catch (e) {console.log('print err !!!');}console.log("==========end("+msg+")===========")
}//封包
function getPackage(data){var data_str='';if(data){data_str=JSON.stringify(data);}var pack={appKey:'123456',version:'1.0.0',isEncrypt:'N',data:data_str}return pack;
}//取得用户openid
function getOpenid(){var openid = getCache("openid");if (openid) {return openid;}wx.login({//获取codesuccess: function (res) {var code = res.code //返回codevar url = cfg.config.getOpenIdUrl+'&js_code=' + code + '&grant_type=authorization_code';tag(url,"get openid url");wx.request({url: url,data: {},header: {'content-type': 'application/json'},success: function (res) {if (res.data.openid){setCache("openid", res.data.openid);}}})}});return openid;}function setCache(key, value) {if (key != null && value != null) {try {wx.setStorageSync(key, value);tag(value, "保存缓存成功 key=" + key);return true;} catch (e) {tag(e, "保存到缓存失败 key=" + key + " value=" + value);}}return false;
}function getCache(key) {var obj = null;if (key) {try {obj = wx.getStorageSync(key);tag(obj, "从缓存取 key=" + key);} catch (e) {tag(e, "从缓存取数据失败 key=" + key);}}return obj;
}function isMobile(mobile) {var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\d{8})$/;return myreg.test(mobile);}//显示成功信息
function show(title,icon){wx.showToast({title: title||'JX信息提示',icon:icon||'success',duration: 1500});
}//显示错误信息
function showErr(title){show(title,'loading');
}function getLoginToken(){return getCache('loginToken');
}function setLoginToken(loginToken) {return setCache('loginToken', loginToken);
}//原始处理,不对外开发
function reqPackOrg(reqUrl, pack, fnSuccess, fnFail) {wx.request({method: 'POST',url: reqUrl,data: pack,header: {'content-type': 'application/x-www-form-urlencoded','Cookie': 'loginToken='+getLoginToken()},success: function (result) {tag(result, "结果处理");if (fnSuccess) {fnSuccess.call(result);} else {show("操作成功");}},fail: function (result) {tag(res, "调用API submit fail");if (fnFail) {fnFail.call(result);} else {showErr("操作失败!");}},complete: function (result) {tag(result, "调用API结果submit complete");}});}//结合后台业务处理,统一调用
function reqPack(reqUrl, pack, fnSuccess, fnFail, fnComplete){wx.request({method: 'POST',url: reqUrl,data: pack,header: {'content-type': 'application/x-www-form-urlencoded'},success: function (result) {var pack= result.data;tag(pack, "结果处理");if (pack.resultCode==200){var busData = pack.data;if (typeof busData== 'string') {busData = busData.replace(/\ufeff/g, "");//重点var jsonObj = JSON.parse(busData);pack.data = jsonObj;}if (fnSuccess) {if (fnSuccess.length == 1){fnSuccess.call(this, pack);}else{fnSuccess.call();}} else {show("操作成功");}}else{if (fnFail) {fnFail.call(result);}else{if (pack.resultCode && pack.resultMsg) {showErr( pack.resultMsg + "[" + pack.resultCode + "]");} else {showErr("处理错误!");}}} },fail: function (result) {tag(res, "调用API submit fail");if (fnFail) {fnFail.call(result);}else{showErr("操作失败!");}},complete: function (result) {tag(result, "调用API结果submit complete");if (fnComplete){fnComplete.call();}}});}function reqData(api, jsonData, fnSuccess, fnFail,fnComplete) {var reqUrl=cfg.config.jx_url+api;var pack = getPackage(jsonData);reqPack(reqUrl, pack, fnSuccess, fnFail, fnComplete);}function req(api, fnSuccess, fnFail) {var reqUrl = cfg.config.jx_url + api;var pack = getPackage(null);reqPack(reqUrl, pack, fnSuccess, fnFail,null)}let curUserInfo = 'curUserInfo';function setUserInfoCache(userInfo) {var memberInfo = {nickName: userInfo.nickName,org: userInfo};setCache(curUserInfo, memberInfo)}function getUserInfo(){return getCache(curUserInfo);}//每个业务页面初始化处理function init(){var token=getLoginToken();tag(token,"检测在线标识状态");if(!token){wx.redirectTo({url: cfg.config.loginUrl});}}module.exports = {getPackage: getPackage,tag: tag,getOpenid: getOpenid, isMobile: isMobile,reqData: reqData,req:req, setUserInfoCache: setUserInfoCache,show: show, showErr: showErr,getLoginToken: getLoginToken,setLoginToken: setLoginToken,getUserInfo: getUserInfo,init: init}

三  2019年后,公司开始接了很多的项目,小程序项目基本全部用uni-app框架开发,再优化一点,根据使用情况对function request(method, reqUrl, pack, fnSuccess)去掉了失败函数传参。

"use strict";
//TestServer
//var baseUrl = 'http://192.168.22.193:8092'//外网地址
var baseUrl = 'http://47.xx.xx.57:8063'//线上
// var baseUrl = 'https://xcx.xxx.xxx'//封包
function getPackage(data) {let data_str = '';if (data) {data_str = JSON.stringify(data);}let pack = {language:1,isEncrypt: 'N',data: data_str}return pack;
}function request(method, reqUrl, pack, fnSuccess) {pack = getPackage(pack);uni.request({method: method || 'POST',url: baseUrl + reqUrl,data: pack,header: {'Content-Type': 'application/x-www-form-urlencoded','Authorization': getCache("token")? getCache("token") : ""},success: function(result) {let pack = result;if (fnSuccess) {if (fnSuccess.length == 1) {fnSuccess.call(this, pack);} else if (fnSuccess.length == 2) {fnSuccess.call(this, pack, pack.data.data);} else {fnSuccess.call();}} else {showToast("操作成功");}},fail: function(result) {try {if (result.errMsg.indexOf('request:fail') != -1) {alert("似乎已断开与互联网的连接");} else {alert("操作失败!");}} catch (e) {alert("操作失败!");}}})
}function navigateTo(url) {uni.navigateTo({url: url});
}function switchTab(url) {uni.switchTab({url: url});
}function redirectTo(url) {uni.redirectTo({url: url});
}function showToast(title, icon) {uni.showToast({title: title || '出错了',icon: icon || 'success',duration: 2000});
}
// alert
function alert(msg, title, success) {uni.showModal({title: '温馨提示' || title,content: msg,showCancel: false,confirmColor: "#000",success: success || {}})
}
//设置缓存
function setCache(key, value) {if (key != null && value != null) {try {uni.setStorageSync(key, value);// console.log('设置缓存' + key + '=' + value);} catch (e) {console.log(e, "保存缓存失败")}}
}
//取出缓存
function getCache(key) {var obj = null;if (key) {try {obj = uni.getStorageSync(key);// console.log("取出缓存", obj)} catch (e) {console.log(e, "取出缓存失败")}}return obj;
}
//分享页面
function onShareAppMessage(title,url) {return {title: title || '',path: 'pages/home/home'||url}
}
// 手机验证
function isMobile(mobile) {// 最新正则var myreg = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/;return myreg.test(mobile);
}
// 身份证验证
function isId(isId) {var myreg = /\d{17}[\d|x]|\d{15}/;return myreg.test(isId);
}
// 邮箱验证
function iseMail(iseMail) {var myreg = /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/;return myreg.test(iseMail);
}
// QQ验证
function isQQ(isQQ) {var myreg = /^[1-9]\d{4,9}$/;return myreg.test(isQQ);
}//补全时间两位数
function prefixZero(n, m) {var _a = (Array(m).join(0) + n).slice(-m)return _a}
module.exports = {request: request,navigateTo: navigateTo,switchTab: switchTab,redirectTo:redirectTo,showToast: showToast,alert:	alert,setCache: setCache,getCache: getCache,onShareAppMessage:onShareAppMessage,baseUrl:baseUrl,isMobile:isMobile,isId:isId,iseMail:iseMail,isQQ:isQQ,prefixZero:prefixZero
}

这几年间公司加入专开发小程序的同事,这里太忙了我也没有时间怎么去关注了,后面发现他们具然所有的小程序项目都在用,而且连引用的文件名都没有改,如图:

四  2023年后小程序项目基本开始外包,被外包修改后的代码,变化不是很大。

"use strict";//TestServer
//var baseUrl = 'http://192.168.22.193:8888'
//外网地址
var baseUrl = 'https://xx.xx.xx.xx'//线上// var baseUrl = 'https://xx.xx.xx'
//封包
function getPackage(data) {let data_str = '';if (data) {data_str = JSON.stringify(data);}let pack = {language:1,isEncrypt: 'N',data: data_str}return pack;
}
//8d2df462-b665-4441-8ed5-f216c8babf53
function addImgFun(tempFilePaths,fun){for(var i=0;i<tempFilePaths.length;i++){uni.uploadFile({url:baseUrl+'/api/v1/file/uploadImgs', //仅为示例,非真实的接口地址filePath: tempFilePaths[i],header:{'Authorization': getCache("token")? getCache("token") : ""},name: 'files',success: (uploadFileRes) => {console.log(JSON.parse(uploadFileRes.data).data[0]);fun(JSON.parse(uploadFileRes.data).data[0])}});}
}//xx测试账号
setCache("token",'9d307453-f0b1-4f7f-9a8c-41c1f803de73');// setCache("token",'cccf7a52-855b-42d8-b5cf-d48eb7f678c2');
// setCache("token",'74bc8184-ac49-424f-9029-273cfcbfdd62');// setCache("token",'fdd31cad-e9ce-4ad0-afc8-8c3ad42e0dc9');
function request(method, reqUrl, pack, fnSuccess,err) {// setCache("token",'8d2df462-b665-4441-8ed5-f216c8babf53');// console.log(baseUrl + reqUrl)if(!pack.noShowLoading){uni.showLoading({title: '加载中'});delete pack.noShowLoading;}pack = getPackage(pack);uni.request({method: method || 'POST',url: baseUrl + reqUrl,data: pack,header: {'Content-Type': 'application/x-www-form-urlencoded','Authorization': getCache("token")? getCache("token") : ""},success: function(result) {uni.hideLoading();let pack = result;console.log("pack+++++++++",JSON.stringify(pack))if(pack.data.code==400){showToast(pack.data.msg);if(pack.data.failReason==1||pack.data.failReason==2||pack.data.failReason==3){setCache("token","");setTimeout(function(){uni.navigateTo({url:"/pages/home/home"})},2000)}else if(pack.data.failReason==26){setTimeout(function(){uni.reLaunch({url:"../charge/charge"})},2000)}else if(pack.data.failReason==12){setTimeout(function(){uni.navigateTo({url:"../order/order"})},2000)}else if(pack.data.failReason==13){setTimeout(function(){uni.navigateBack({delta:1})},2000)}if(err){err(pack);}return false;}else if (pack.data.code&&pack.data.code==200&&fnSuccess) {if (fnSuccess.length == 1) {fnSuccess.call(this, pack);} else if (fnSuccess.length == 2) {fnSuccess.call(this, pack, pack.data.data);} else {fnSuccess.call();}}else{showToast(pack.data.msg);} // else {// 	showToast("操作成功");// }},fail: function(result) {uni.hideLoading();try {if (result.errMsg.indexOf('request:fail') != -1) {// alert("似乎已断开与互联网的连接");} else {// alert("操作失败!");}} catch (e) {// alert("操作失败!");}}})
}function navigateTo(url) {uni.navigateTo({url: url});
}function switchTab(url) {uni.switchTab({url: url});
}function redirectTo(url) {uni.redirectTo({url: url});
}function showToast(title, icon) {uni.showToast({title: title || '出错了',icon: icon || 'none',mask:true,duration: 2000});
}
// alert
function alert(msg, title, success) {uni.showModal({title: '温馨提示' || title,content: msg,showCancel: false,confirmColor: "#000",success: success || {}})
}
//设置缓存
function setCache(key, value) {if (key != null && value != null) {try {uni.setStorageSync(key, value);// console.log('设置缓存' + key + '=' + value);} catch (e) {console.log(e, "保存缓存失败")}}
}
//取出缓存
function getCache(key) {var obj = null;if (key) {try {obj = uni.getStorageSync(key);// console.log("取出缓存", obj)} catch (e) {console.log(e, "取出缓存失败")}}return obj;
}
//分享页面
function onShareAppMessage(title,url) {return {title: title || '',path: 'pages/home/home'||url}
}
// 手机验证
function isMobile(mobile) {// 最新正则var myreg = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/;return myreg.test(mobile);
}
// 身份证验证
function isId(isId) {var myreg = /\d{17}[\d|x]|\d{15}/;return myreg.test(isId);
}
// 邮箱验证
function iseMail(iseMail) {var myreg = /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/;return myreg.test(iseMail);
}
// QQ验证
function isQQ(isQQ) {var myreg = /^[1-9]\d{4,9}$/;return myreg.test(isQQ);
}//补全时间两位数
function prefixZero(n, m) {var _a = (Array(m).join(0) + n).slice(-m)return _a}//补全时间两位数
function login(fun) {if(getCache("token")){if(fun){fun();}}else{setCache("token",'')uni.login({provider: 'weixin',success: function(loginRes) {var data = {code: loginRes.code}request("POST", "/api/v1/common/wxLogin", data, (res) => {// if (res.data.ret_code == 200) {setCache("token", res.data.data.token)setCache("memberId",res.data.data.user.id)if(res.data.data.user.plateNo){setCache("memberPlateNo",res.data.data.user.plateNo);}if(fun){fun();}// } else {// 	comm.showToast(res.data.ret_msg, "none")// }})}})}
}
module.exports = {request: request,navigateTo: navigateTo,switchTab: switchTab,redirectTo:redirectTo,showToast: showToast,alert:	alert,setCache: setCache,getCache: getCache,onShareAppMessage:onShareAppMessage,baseUrl:baseUrl,isMobile:isMobile,isId:isId,iseMail:iseMail,isQQ:isQQ,prefixZero:prefixZero,addImgFun:addImgFun,login:login,
}

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/316801.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

向日葵远程控制软件MySQL5.7的安装与配置

目录 一. 向日葵远程控制软件 1.1 简介 1.2 选择原因 1.3 安装及使用 1.4 使用场景 二. MySQL5.7 安装与配置 2.1 什么是MySQL 2.2 安装 MySQL5.7 2.2.1 安装步骤 2.2.2 内部连接 2.2.3 外部连接 三. 思维导图 一. 向日葵远程控制软件 1.1 简介 向日葵电脑版是一款拥有多年…

智能化校园:深入探讨云端管理系统设计与实现(一)

推荐阅读 轻松驾驭JDBC&#xff1a;一篇文章帮你搞定数据库连接 ChatGPT爆火一周年&#xff0c;快来拥有专属你的ChatGPT应用&#xff01; 文章目录 推荐阅读智慧校园云端管理系统的设计和实现项目简介项目技术栈项目功能项目开发项目搭建修改pom.xml文件项目包结构配置applic…

element-ui Tree 树形控件 过滤保留子级并获取过滤后的数据

本示例基于vue2 element-ui element-ui 的官网demo是只保留到过滤值一级的&#xff0c;并不会保留其子级 目标 1、Tree 树形控件 保留过滤值的子级 2、在第一次过滤数据的基础上进行第二次过滤 先看效果 Tree 树形控件 保留过滤值的子级 <el-treeclass"filter-t…

Redis(中)

1、redis的持久化 "Redis 如何将数据写入磁盘"&#xff0c;首先要明白的时候&#xff0c;我们使用的redis的数据保存在内存上的&#xff0c;也就是说&#xff0c;只要我们的电脑关机或者重启服务器&#xff0c;那么在内存中的数据就会消失&#xff0c;所以要想持久化…

网络四元组

文章目录 网络四元组 今天我们来聊聊 网络四元组 网络四元组 四元组&#xff0c;简单理解就是在 TCP 协议中&#xff0c;去确定一个客户端连接的组成要素&#xff0c;它包括源 IP 地址、目标 IP 地址、源端口号、目标端口号。 正常情况下&#xff0c;我们对于网络通信的认识可…

2024,这将是量子计算的真正挑战

2023年&#xff0c;一项项量子计算纪录被打破。 谷歌量子AI团队证明了将多个量子比特分组合成为一个逻辑量子比特的纠错方法可以提供更低的容错率。以往的纠错研究随着比特数的增加&#xff0c;错误率会提高&#xff0c;都是“越纠越错”&#xff0c;而这次谷歌首次实现了“越纠…

Vue3 结合typescript 组合式函数

在App.vue文件中 实现鼠标点击文件&#xff0c;显示坐标值 第一种方法 第二种方法&#xff1a;组合式函数 结果&#xff1a; 官网推荐组合函数&#xff1a;https://vueuse.org

[讲座] - 闲聊工业设计

1&#xff0c;工业设计相关的学科分类 2&#xff0c;工业设计的职业发展路线 3&#xff0c;工业设计师的成名人物 4&#xff0c;设计了可口可乐的Loewy 可口可乐的瓶子&#xff0c;无论白天晚上还是瓶子被打碎&#xff0c;都能认出这个是可口可乐的瓶子。 草图参照了可可豆&am…

项目引入Jar包的几种方式

目录 背景 方式一 前提 创建一个jar包 使用 方式二 背景 通常情况下&#xff0c;使用SpringBoot框架开发项目的过程中&#xff0c;需要引入一系列依赖&#xff0c;首选的就是在项目的 pom.xml 文件里面通过Maven坐标进行引入&#xff08;可以通过Maven的坐标引入jar包的前…

Java中的数据类型和操作符

目录 Java的数据类型&#xff1a; ! >>> ?: 数组另外一种传参形式&#xff1a; 输入&#xff1a; switch: 快捷键&#xff1a; 快捷创建包&#xff1a; 提交Gitee仓库&#xff1a; next和nextLine区别&#xff1a; 注意事项&#xff1a; 循环终…

【零基础入门TypeScript】类型和变量

目录 任意类型 内置类型 Null 和 undefined ─ 它们是一样的吗&#xff1f; 用户定义类型 TypeScript 中的变量声明 示例&#xff1a;TypeScript 中的变量 TypeScript 中的类型断言 例子 TypeScript 中的推断类型 示例&#xff1a;推断类型 TypeScript 变量作用域 …

Vue3-34-路由-路由配置参数 props

说明 路由的路径中可以携带参数&#xff0c; 形式如 &#xff1a;/a/:pname &#xff0c;这个:表示这是个参数&#xff0c;pname &#xff1a;表示 参数名称。 在组件中&#xff0c;可以通过 当前路由对象的 params 属性来获取到这个参数&#xff0c; 当前路由对象 可以通过 us…