• 微信小程序网络封装-简单高效


    废话引言

    小程序虽然出世很久了,但一直没怎么接触到小程序开发。吉他兴趣班老师想弄一个小程序发布课程信息和打卡功能,作为IT一员就自愿加入了这个小程序开发小组中。虽然小程序面向的是前端工程师,但作为移动端程序猿感觉甚是友好,加上有点前端基础就更是觉得入手很easy啦。

    微信小程序的网络请求很便捷,直接调用就可以了。但最好还是根据需求,处理一些参数回调信息,进行二次封装,为整个小程序应用直接提供调方法接口岂不是更好?

    利用网络请求的一贯思维,分三个回调:onStart:开始请求, onSuccess:请求成功回调, onFailed:请求失败回调, 意思就是字面意思~

    netUtil.js 网络请求工具封装

    在utils目录下创建一个netUtil.js文件

    
    /**
     * 供外部post请求调用
     */
    function post(url, params, onStart, onSuccess, onFailed) {
      request(url, params, "POST", onStart, onSuccess, onFailed);
    }
    
    /**
     * 供外部get请求调用
     */
    function get(url, params, onStart, onSuccess, onFailed) {
      request(url, params, "GET", onStart, onSuccess, onFailed);
    }
    
    /**
     * function: 封装网络请求
     * @url URL地址
     * @params 请求参数
     * @method 请求方式:GET/POST
     * @onStart 开始请求,初始加载loading等处理
     * @onSuccess 成功回调
     * @onFailed  失败回调
     */
    function request(url, params, method, onStart, onSuccess, onFailed) {
      onStart(); //request start
      wx.request({
        url: url,
        data: dealParams(params),
        method: method,
        header: { 'content-type': 'application/json' },
        success: function (res) {
          if (res.data) {
            /** start 根据需求 接口的返回状态码进行处理 */
            if (res.data.error_code == 0) {
              onSuccess(res.data); //request success
            } else {
              onFailed(res.data.msg); //request failed
            }
            /** end 处理结束*/
          }
        },
    
        fail: function (error) {
          onFailed(""); //failure for other reasons
        }
      })
    }
    
    /**
     * function: 根据需求处理请求参数:添加固定参数配置等
     * @params 请求参数
     */
    function dealParams(params) {
      return params;
    }
    
    module.exports = {
      postRequest: post,
      getRequest: get,
    }
    

    小案例使用说明:笑话大全接口

    简要描述:

    • 用户注册接口

    请求URL:

    • http://v.juhe.cn/joke/content/list.php

    请求方式:

    • GET

    参数:

    参数名 必选 类型 说明
    sort string 降序“des”,升序“asc”
    page int 页数,默认1
    pageSize int 默认每页加载20条数据
    time string 时间戳10位
    key string appkey

    返回示例

      {
        "error_code": 0,
        "reason": "Success",
        "result": {
            "data": [
                {
                    "content": "某先生是地方上的要人。一天,他像往常一样在书房里例览当日报纸,突然对妻子大声喊道:喂,安娜,你看到今天早报上的流言蜚语了吗?真可笑!他们说,你收拾行装出走了。你听见了吗?安娜、你在哪儿?安娜?啊!",
                    "hashId": "90B182FC7F74865B40B1E5807CFEBF41",
                    "unixtime": 1418745227,
                    "updatetime": "2014-12-16 23:53:47"
                },
                {
                    "content": "有一天我看着报纸,小声嘟囔着一篇文章的题目鸟儿也有外语,丈夫听了对了一句:鸟儿当然也有‘外遇’。原来丈夫听错了,我笑得前仰后合。",
                    "hashId": "206F5C52FD2ED94772CBC66C8AC61F2A",
                    "unixtime": 1418745227,
                    "updatetime": "2014-12-16 23:53:47"
                }
            ]
        }
    }
    

    小程序页面js文件中引入netUtil

    var netUtil = require("../../utils/network.js"); //require引入
    Page({
      data: {
        jokeList: {}
      },
    
      onLoad: function (options) {
        var url = "http://v.juhe.cn/joke/content/list.php";
        var params = {
          sort: "",
          page: 1,
          pagesize: 5,
          time: "1418816972",
          key: "746dfdb4cd8445d30a8f915fd2b5f76b",
        }
    
        netUtil.getRequest(url, params, this.onStart, this.onSuccess, this.onFailed); //调用get方法情就是户数
      },
    
      onStart: function () { //onStart回调
        wx.showLoading({
          title: '正在加载',
        })
      },
      onSuccess: function (res) { //onSuccess回调
        wx.hideLoading();
        this.setData({
          jokeList: res.result.data //请求结果数据
        })
      },
      onFailed: function (msg) { //onFailed回调
        wx.hideLoading();
        if (msg) {
          wx.showToast({
            title: msg,
          })
        }
      },
    })
    

    在wxml文件中绑定请求的笑话大全列表:jokeList

    <view>
       <block wx:for="{{jokeList}}" wx:for-item="item" wx:key="idx">
        <view class='joke_container'>
          <text>{{item.content}}</text>
        </view>
     </block>
    </view>
    
  • 相关阅读:
    尚硅谷vue 10 2 单文件组件
    尚硅谷vue 4 动态绑定class样式
    mysql注意事项 持续补充
    mysql实现分组排序
    python数据分析包 pandas dataframe
    mysql性能调优
    尚硅谷vue 5 条件渲染
    尚硅谷vue 9 生命周期
    尚硅谷vue 8 内置指令 v
    flutter MAC 真机调试
  • 原文地址:https://www.cnblogs.com/denluoyia/p/9428570.html
Copyright © 2020-2023  润新知