微信小程序开发之之网络请求简单封装
凌雪 2018-10-10 来源 :网络 阅读 976 评论 0

摘要:本文将带你了解微信小程序开发之之网络请求简单封装,希望本文对大家学微信有所帮助。

本文将带你了解微信小程序开发之之网络请求简单封装,希望本文对大家学微信有所帮助。


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

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 1
看完这篇文章有何感觉?已经有1人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程