欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-03 13:49:31
微信小程序之网络请求简单封装实例详解 在微信小程序中实现网络请求相对于android来说感觉简单很多,我们只需要使用其提供的api就可以解决网络请求问题。 普通...

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

在微信小程序中实现网络请求相对于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: '加载数据失败',
   })
  })
}

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