微信小程序之网络请求简单封装

在微信小程序中实现网络请求相对于Android来讲感受简单不少,咱们只须要使用其提供的API就能够解决网络请求问题。 json

  • 普通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()隐藏导航栏加载动画。api

当网络请求成功而且状态码为200时,将请求到的数据回调经过su
ccess(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: '加载数据失败',
      })
    })
}复制代码
相关文章
相关标签/搜索