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


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 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
一段好玩的JavaScript代码
Dec 01 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
Sep 13 Javascript
JS实现字体选色板实例代码
Nov 20 Javascript
基于JavaScript实现简单的随机抽奖小程序
Jan 05 Javascript
JavaScript每天必学之基础知识
Sep 17 Javascript
js实现表格筛选功能
Jan 18 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
vuex直接赋值的三种方法总结
Sep 16 Javascript
关于js陀螺仪的理解分析
Apr 11 Javascript
nuxt.js写项目时增加错误提示页面操作
Nov 05 Javascript
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 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和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
2011/07/03 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
JavaScript 闭包的使用场景
2020/09/17 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
python Flask实现restful api service
2017/12/04 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
自我评价范文分享
2014/01/04 职场文书
小学一年级学生评语
2014/04/22 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
出差报告格式模板
2014/11/06 职场文书
初三英语教学反思
2016/02/15 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python