小程序学习笔记 请求接口

Posted by fsoooo Blog on April 10, 2018

微信小程序请求接口

官方给出的接口叫做wx.request,请求方式比较简单,下面是官网给出的请求实例。

wx.request({
  url: 'test.php', //仅为示例,并非真实的接口地址
  data: {
     x: '' ,
     y: ''
  },
  header: {
      'content-type': 'application/json'
  },
  success: function(res) {
    console.log(res.data)
  }
})
  • url:请求的接口地址
  • data:请求参数
  • header:请求头,包括host、User-Agent、Accept、Accpt-Language、Referer等
  • method:请求方式:POST/GET
  • success:当接口请求成功时,小程序就会自动触发这个函数,获取的是从服务器返回的数据(json)。请求成功后获取到的数据就是success函数的参数result。
  • fail:当接口调用失败时,小程序就会触发这个函数,返回错误信息
  • complete:接口调用结束的回调函数(调用成功、失败都会执行),通过that.setData将数据传递给WXML页面。
onLoad: function (options) {
    //onLoad方法,页面只加载一次。
	//onShow方法每次页面显示都会执行。
        wx.showToast({ //显示消息提示框  此处是提升用户体验的作用
            title: '数据加载中',
            icon: 'loading',
        });
        wx.request({
            url: 'test/test', //请求接口的url
            method: 'GET', //请求方式
            data: {},//请求参数格式为json
            header: {
                'content-type': 'application/json' // 默认值
            },
            complete() {  //请求结束后隐藏 loading 提示框
                wx.hideLoading();
            },
            success: res => {
                this.setData({
                    data: res.data,
                })
            }
        });
    });
setData 函数用于将数据从逻辑层发送到视图层同时改变对应的 this.data 的值 
setData() 参数格式 
以key,value的形式表示将this.data 中的 key 对应的值改变成 value 
其中 key 可以非常灵活以数据路径的形式给出 array[2].messagea.b.c.d并且不需要在 this.data 中预先定义 
注意 
直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的还会造成数据不一致 
单次设置的数据不能超过1024kB请尽量避免一次设置过多的数据
post请求,参数为键值对格式(参数内容类型为x-www-form-urlencoded)
wx.request({
      url: 'http://192.168.1.103/yiji/skillList.php',
      method: 'POST',
      data:'pageSize=1&pageNum=10',    //参数为键值对字符串
      header: {
        //设置参数内容类型为x-www-form-urlencoded
        'content-type':'application/x-www-form-urlencoded',
        'Accept': 'application/json'
      },
      success: function (res) {
        console.log(res.data)
        that.setData({
          items: res.data
        })
      }
    })

wx.request请求回来的数据没有及时显示到页面上

onLoad: function () {
      var that = this;
      wx.request({
        url:app.globalData.url.api.home,
        success: function(res) {
            var matchsFirst = xxx;
            var matchsSecond= xxx;
            var matchsLast= xxx;
            //这样直接赋值并不会把数据渲染到页面上的 
            that.data.matchsFirst=matchsFirst;
            that.data.matchsSecond=matchsSecond;
            that.data.matchsLast=matchsLast;
        }});
    };
    //应该安这种方式赋值
    that.setData({
          matchsFirst:matchsFirst,
          matchsSecond:matchsSecond,
          matchsLast:matchsLast
        });