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


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文件的小脚本
Jun 28 Javascript
基于jquery的一行代码轻松实现拖动效果
Dec 28 Javascript
JavaScript显示当前文档最后修改日期的方法
Mar 19 Javascript
js变形金刚文字特效代码分享
Aug 20 Javascript
jQuery中JSONP的两种实现方式详解
Sep 26 Javascript
JavaScript之创意时钟项目(实例讲解)
Oct 23 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
vue文件树组件使用详解
Mar 29 Javascript
vue-cli3.0 特性解读
Apr 22 Javascript
JavaScript 跨域之POST实现方法
May 07 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
Aug 30 Javascript
浅谈JS的二进制家族
May 09 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
python自动化测试实例解析
2014/09/28 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
wxPython实现绘图小例子
2019/11/19 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
什么是测试驱动开发(TDD)
2012/02/15 面试题
教师远程培训感言
2014/03/06 职场文书
经典安踏广告词
2014/03/21 职场文书
白血病捐款倡议书
2014/05/14 职场文书
欢迎领导检查标语
2014/06/27 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
员工辞职信怎么写
2015/02/27 职场文书
辛亥革命观后感
2015/06/02 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
SQL SERVER触发器详解
2022/02/24 SQL Server
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle