详解微信小程序网络请求接口封装实例


Posted in Javascript onMay 02, 2019

网络请求封装实例

实现定制要求和方便调用,对微信小程序的网络请求接口进行了封装

  1. 封装位置:app.js,方便全局调用
  2. 实现方法调用,只用关注接口url和入参
  3. 默认和自定义的请求成功、失败和完成的回调处理
  4. 可设置请求失败自动重新请求的次数
  5. 可以防止重复提交
  6. 每个请求设定requestCode

代码

直接将这个方法放在了app.js中

/**
  * 接口公共访问方法
  * @param {Object} urlPath 访问路径
  * @param {Object} params 访问参数(json格式)
  * @param {Object} requestCode 访问码,返回处理使用
  * @param {Object} onSuccess 成功回调
  * @param {Object} onErrorBefore 失败回调
  * @param {Object} onComplete 请求完成(不管成功或失败)回调
  * @param {Object} isVerify 是否验证重复提交
  * @param {Object} requestType 请求类型(默认POST)
  * @param {Object} retry 访问失败重新请求次数(默认1次)
  */
 webCall: function (urlPath, params, requestCode, onSuccess, onErrorBefore, onComplete, isVerify, requestType, retry) {
  var params = arguments[1] ? arguments[1] : {};
  //var requestCode = arguments[2] ? arguments[2] : 1;
  var onSuccess = arguments[3] ? arguments[3] : function () { };
  var onErrorBefore = arguments[4] ? arguments[4] : this.onError;
  var onComplete = arguments[5] ? arguments[5] : this.onComplete;
  var isVerify = arguments[6] ? arguments[6] : false;
  var requestType = arguments[7] ? arguments[7] : "POST";
  var retry = arguments[8] ? arguments[8] : 1;
  var that = this;

  //防止重复提交,相同请求间隔时间不能小于500毫秒
  var nowTime = new Date().getTime();
  if (this.requestCount[urlPath] && (nowTime - this.requestCount[urlPath]) < 500) {
   return;
  }
  this.requestCount[urlPath] = nowTime;
  //是否验证重复提交
  if (isVerify) {
   if (this.verifyCount[urlPath]) {
    return;
   }
   this.verifyCount[urlPath] = true; //重复验证开关开启
  }

  console.log("发起网络请求, 路径:" + (that.apiHost + urlPath) + ", 参数:" + JSON.stringify(params));
  wx.request({
   url: that.apiHost + urlPath,
   data: params,
   method: requestType, // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
   header: {
    'content-type': requestType == 'POST' ?
     'application/x-www-form-urlencoded' : 'application/json'
   }, // 设置请求的 header
   success: function (res) {
    console.log("返回结果:" + JSON.stringify(res.data));
    if (res.data) {
     if (res.data.statusCode == 200) { //访问成功
      onSuccess(res.data, requestCode);
     } else if (res.data.statusCode == 300000001) { // 未登录
      that.isLogin = false;
      onErrorBefore(0, res.data.message, requestCode);
     } else {
      onErrorBefore(0, res.data.message == null ? "请求失败 , 请重试" : res.data.message, requestCode);
     }
    } else {
     onErrorBefore(0, "请求失败 , 请重试", requestCode);
    }
   },
   fail: function (res) {
    retry--;
    console.log("网络访问失败:" + JSON.stringify(res));
    if (retry > 0) return that.webCall(urlPath, params, requestCode, onSuccess, onErrorBefore, onComplete, requestType, retry);
   },
   complete: function (res) {
    onComplete(requestCode);
    //请求完成后,2秒后重复验证的开关关闭
    if (isVerify) {
     setTimeout(function () {
      that.verifyCount[urlPath] = false;
     }, 2000);
    }
   }
  })
 }

上面的verifyCount是放在data中的数组,apiHost 是放在js最外层的接口服务器地址,方便随时开发、测试环境。

这个方法也是必不可少的

complete: function (res) {
    onComplete(requestCode);
    //请求完成后,2秒后重复验证的开关关闭
    if (isVerify) {
     setTimeout(function () {
      that.verifyCount[urlPath] = false;
     }, 2000);
    }
   }
  })

调用示范

请求:

// 请求 home banner 数据
  wx.showNavigationBarLoading();
  app.webCall("/app/homeBanner", {}, QUERY_BANNER, this.onSuccess, this.onErrorBefore, this.onComplete);

请求成功的回调处理:

/**
  * 接口访问成功返回
  * @param {Object} data
  * @param {Object} requestCode
  */
 onSuccess: function (data, requestCode) {
   var that = this;
  switch (requestCode) {
   case QUERY_BANNER:
    that.setData({ bannerData: (data ? data.data : []) });
    break;
  }

QUERY_BANNER是放在js最外层的常量,用于接口访问完成后的回调方法来区分请求的接口是哪个。

请求完成的处理:

/**
  * 接口访问完成
  * @param {Object} resultCode
  */
 onComplete: function (resultCode) {
  console.log("home onComplete1");

  if (--mCurrentRequestNums <= 0) {
   wx.hideNavigationBarLoading();
  }
 }

mCurrentRequestNums 是放在js最外层的变量,表示发起请求的数量,用于多个接口同时被调用,并希望在全部请求结束后关闭标题栏加载动画时用。

以上所述是小编给大家介绍的微信小程序网络请求接口封装详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery文本框高亮显示插件代码
Apr 02 Javascript
jquery键盘事件使用介绍
Nov 01 Javascript
JavaScript中实现继承的三种方式和实例
Jan 29 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
May 25 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
Dec 26 Javascript
js中数组的常用方法小结
Dec 30 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
JavaScript中Array方法你该知道的正确打开方法
Sep 11 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
Jun 05 Javascript
关于uniApp editor微信滑动问题
Jan 15 Javascript
html中两种获取标签内的值的方法
Jun 16 jQuery
vue 搭建后台系统模块化开发详解
May 01 #Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
May 01 #Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
May 01 #Javascript
3分钟了解vue数据劫持的原理实现
May 01 #Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
May 01 #Javascript
JavaScript强制类型转换和隐式类型转换操作示例
May 01 #Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
May 01 #Javascript
You might like
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
python实现的各种排序算法代码
2013/03/04 Python
Python类属性的延迟计算
2016/10/22 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
django rest framework 自定义返回方式
2020/07/12 Python
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
《美丽的小路》教学反思
2014/02/26 职场文书
网站客服岗位职责
2014/04/05 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
党支部先进事迹材料
2014/12/24 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
家庭经济困难证明
2015/06/23 职场文书
2019年教师入党申请书
2019/06/27 职场文书
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js