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


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 相关文章推荐
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
JavaScript各类型的关系图解
Oct 16 Javascript
每天一篇javascript学习小结(String对象)
Nov 18 Javascript
日常收藏的jquery技巧
Dec 02 Javascript
简易的JS计算器实现代码
Oct 18 Javascript
bootstrap Table插件使用demo
Aug 07 Javascript
浅谈Node异步编程的机制
Oct 18 Javascript
通过 JS 判断页面是否有滚动条的实现方法
Apr 05 Javascript
每个 JavaScript 工程师都应懂的33个概念
Oct 22 Javascript
Vue动态创建注册component的实例代码
Jun 14 Javascript
Vue实例的对象参数options的几个常用选项详解
Nov 08 Javascript
JS数组方法shift()、unshift()用法实例分析
Jan 18 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
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
php二维码生成以及下载实现
2017/09/28 PHP
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
python正则表达式re模块详解
2014/06/25 Python
Python实现全局变量的两个解决方法
2014/07/03 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
python绘制双柱形图代码实例
2017/12/14 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
就业推荐自我鉴定
2013/10/06 职场文书
应届生求职信写作技巧
2013/10/24 职场文书
单位未婚证明范本
2014/01/18 职场文书
经济国贸专业求职信
2014/06/18 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
信仰纪录片观后感
2015/06/08 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python