微信小程序之网络请求简单封装实例详解


Posted in Javascript onJune 28, 2017

微信小程序之网络请求简单封装实例详解

在微信小程序中实现网络请求相对于Android来说感觉简单很多,我们只需要使用其提供的API就可以解决网络请求问题。

  • 普通HTTPS请求(wx.request)
  • 上传文件(wx.uploadFile)
  • 下载文件(wx.downloadFile)
  • WebSocket通信(wx.connectSocket)

为了数据安全,微信小程序网络请求只支持https,当然各个参数的含义就不在细说,不熟悉的话可以;可以去阅读官方文档的网络请求api,当我们使用request时header的content-typ默认是application/json,在文档中指出method 的value必须是大写,不过经过测试,小写也能请求成功。request默认的超时时间是60s,如果我们想自定义超时时间,我们可以在app.json中加入下面代码片段,分别设置request,socket,和上传文件及下载文件的超时时间。

"networkTimeout": {
  "request": 5000,
  "connectSocket": 5000,
  "uploadFile": 5000,
  "downloadFile": 5000
 }

设置过超时时间,我们就开始封装网络请求,平时我们所接触的网络请求,一般会分为两类,一类是在后台运行的,没有加载对话框提示,另一种就是有提示,如提示正在加载数据,,那么我们就以此为线索来进行封装。先创建一个network的网络请求工具类,然后

// 展示进度条的网络请求
// url:网络请求的url
// params:请求参数
// message:进度条的提示信息
// success:成功的回调函数
// fail:失败的回调
function requestLoading(url, params, message, success, fail) {
 console.log(params)
  wx.showLoading({
   title: message,
  })
 wx.request({
  url: url,
  data: params,
  header: {
   'content-type': 'application/x-www-form-urlencoded'
  },
  method: 'post',
  success: function (res) {
   //console.log(res.data)
    wx.hideLoading()
   if (res.statusCode == 200) {
    success(res.data)
   } else {
    fail()
   }

  },
  fail: function (res) {
    wx.hideLoading()
    fail()
  },
  complete: function (res) {

  },
 })
}

上面函数很好理解,参数的含义已在代码中解释,在网络请求开始前,先展示Loading对话框,提示用户当前网络正在请求数据,当网络请求成功或者失败后调用wx.hideLoading()取消提示框的展示。在api中还提供了wx.showNavigationBarLoading()用于显示当前页面的导航条加载动画,那么如果我们想展示这个动画可以在requestLoading执行开始调用wx.showNavigationBarLoading(),然后在网络请求成功或者失败后调用wx.hideNavigationBarLoading()隐藏导航栏加载动画。

当网络请求成功并且状态码为200时,将请求到的数据回调通过success(res.data)回调给我们的方法,在上面我们没有对失败原因进行细分,当然你也可以给失败回调加个参数,用于提示用户失败的原因,如res.statusCode ==500时提示服务器内部错误,res.statusCode ==-1时提示请检查网络,res.statusCode ==404,找不到地址等等。

然后我们在创建一个不显示对话框,用户后台请求数据的请求函数,为了少写代码,我们共用上面的函数,如下

//不显示对话框的请求
function request(url, params, success, fail) {
 this.requestLoading(url, params, "", success, fail)
}

我们看到我们最终还是调用的requestLoading,那么我们可以在该函数作下判断,如果提示信息message==''就不显示对话框。

最终的代码

function request(url, params, success, fail) {
 this.requestLoading(url, params, "", success, fail)
}
// 展示进度条的网络请求
// url:网络请求的url
// params:请求参数
// message:进度条的提示信息
// success:成功的回调函数
// fail:失败的回调
function requestLoading(url, params, message, success, fail) {
 console.log(params)
 wx.showNavigationBarLoading()
 if (message != "") {
  wx.showLoading({
   title: message,
  })
 }
 wx.request({
  url: url,
  data: params,
  header: {
   //'Content-Type': 'application/json'
   'content-type': 'application/x-www-form-urlencoded'
  },
  method: 'post',
  success: function (res) {
   //console.log(res.data)
   wx.hideNavigationBarLoading()
   if (message != "") {
    wx.hideLoading()
   }
   if (res.statusCode == 200) {
    success(res.data)
   } else {
    fail()
   }

  },
  fail: function (res) {
   wx.hideNavigationBarLoading()
   if (message != "") {
    wx.hideLoading()
   }
   fail()
  },
  complete: function (res) {

  },
 })
}
module.exports = {
 request: request,
 requestLoading: requestLoading
}

使用就很简单了,如下

//路径根据自己项目路径修改
var network = require("/utils/network.js")
getData:function(){
  network.requestLoading(URL.MY_SCORE, that.data.params, '正在加载数据', function (res) {
  //res就是我们请求接口返回的数据
   console.log(res)
  }, function () {
   wx.showToast({
    title: '加载数据失败',
   })
  })
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
Jquery时间验证和转换工具小例子
Jul 01 Javascript
jQuery拖动布局其结果保存到数据库
Oct 09 Javascript
JavaScript各类型的关系图解
Oct 16 Javascript
Webwork 实现文件上传下载代码详解
Feb 02 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Feb 19 Javascript
ionic隐藏tabs的方法
Aug 29 Javascript
原生js仿浏览器滚动条效果
Mar 02 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
vue 监听屏幕高度的实例
Sep 05 Javascript
checkbox在vue中的用法小结
Nov 13 Javascript
Vue中this.$nextTick的作用及用法
Feb 04 Javascript
JS JQuery获取data-*属性值方法解析
Sep 01 jQuery
详解webpack+angular2开发环境搭建
Jun 28 #Javascript
JavaScript中最常用的10种代码简写技巧总结
Jun 28 #Javascript
AngularJS页面带参跳转及参数解析操作示例
Jun 28 #Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
Jun 28 #Javascript
JavaScript循环_动力节点Java学院整理
Jun 28 #Javascript
JavaScript方法_动力节点Java学院整理
Jun 28 #Javascript
微信小程序后台解密用户数据实例详解
Jun 28 #Javascript
You might like
php 正则表达式小结
2009/08/31 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
PHP常用数组函数介绍
2014/07/28 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
javascript常用的方法整理
2015/08/20 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
javascript实现简单搜索功能
2020/03/26 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
python标准算法实现数组全排列的方法
2015/03/17 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
python中如何写类
2020/06/29 Python
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
党支部组织生活会整改方案
2014/09/30 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
python基础之类方法和静态方法
2021/10/24 Python
JS数组去重详情
2021/11/07 Javascript