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


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 相关文章推荐
js 定时器setTimeout无法调用局部变量的解决办法
Nov 28 Javascript
JavaScript中的anchor()方法使用详解
Jun 08 Javascript
js的flv视频播放器插件使用方法
Jun 23 Javascript
js原生跨域_用script标签的简单实现
Sep 24 Javascript
简单三步实现报表页面集成天气
Dec 15 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
Jan 20 Javascript
js实现日期显示的一些操作(实例讲解)
Jul 27 Javascript
AngularJs点击状态值改变背景色的实例
Dec 18 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
Feb 07 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
Mar 29 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
JS实现简单日历特效
Jan 03 Javascript
详解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手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python中除法使用的注意事项
2014/08/21 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
Python制作exe文件简单流程
2019/01/24 Python
由Python编写的MySQL管理工具代码实例
2019/04/09 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
python 常见的排序算法实现汇总
2020/08/21 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
致短跑运动员广播稿
2014/01/09 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
房屋转让协议书
2014/10/18 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
个人典型事迹材料
2014/12/30 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书