美文网首页【微信小程序】日常积累微信小程序
【微信小程序】wx.request请求封装,超级简单

【微信小程序】wx.request请求封装,超级简单

作者: RealHumans | 来源:发表于2019-05-31 17:03 被阅读5次

    微信提供了api,开发者可以通过wx.request来获取服务器的数据和传递数据。虽然api提供了很大的方便,但是调用多个接口时,代码重复性太高,我们可以进一步封装。

    将官方文档中wx.request的参数贴上,方便阅读

    新建文件request.js,将请求的封装方法写在里面

    var hasClick = false;
    
    const http = (method, url, data, response, error) => {
      if (hasClick) {
        return
      }
      hasClick = true
    
      wx.showLoading({
        title: '加载中...',
        mask: true 
      })
      
      wx.request({
        method: method,
        url: url,
        header: { 
          'content-type': 'application/json'
          // 'token': wx.getStorageSync("token")
         },
        data:data,
        success: res => {
          return response(res)
        },
        fail: err => {
          return error(err)
        },
        complete: info => {
          wx.hideLoading();
          hasClick = false
        }
      })
    }
    
    module.exports = {
      _get: (url, data, response, error) => http('GET', url, data, response, error),
      _post: (url, data, response, error) => http('POST', url, data, response, error),
       _put: (url, data, response, error) => http('PUT', url, data, response, error),
      _delete: (url, data, response, error) => http('DELETE', url, data, response, error),
    }
    
    • 当发起请求的时候,界面出现“加载中...”的Loading界面,请求完成后,取消加载loading。设置加载loading的mask属性为true,可以显示透明蒙层,防止触摸穿透。

    • 有遮罩还不够,某些情况下可能会发生多次请求(用户迅速的点击两次请求按钮,在遮罩层未出来之前)。比如在点击支付的时候,由于调用支付前的误操作,支付完成后再次弹出一个支付框,会给用户带来非常不好的体验。
      可以在封装方法中加一个hasClick的“锁”,在开始请求前检查是否已经发起过请求,如果没有才发起这次请求,等到请求返回之后再把锁的状态恢复回去。

    页面调用,在页面的js文件中引用

    import request from '../../request/request.js'
    
    request(){
      let data = {
        params1:params1, //参数1
        params2:params2, //参数2
      }
        request._get('http://192.168.1.30:8085/banner', data , res => {
          console.log(res)
        },err => {
          console.log(err)
        })
    },
    
    • 如果没有请求参数,把data换成null就好

    小程序默认请求超时时间是60秒,等待时间有点长,我们可以在app.json中进行设置

    {
    //...
    "networkTimeout": {
        "request": 5000
      }
    }
    

    每个页面请求的时候都要引用封装,还是有点麻烦。注意到小程序页面都可以获取app.js的实例(const app = getApp()),所以可以改一下封装,将封装方法直接暴露出去,在app.js中再配置POST/GET等请求;请求的url也可以抽出来写在一起,方便查找和修改。自己试一下吧~

    //觉得有用的话,点个喜欢再走嘛(不要脸.jpg)

    相关文章

      网友评论

        本文标题:【微信小程序】wx.request请求封装,超级简单

        本文链接:https://www.haomeiwen.com/subject/aizwtctx.html