1. 程式人生 > >小程式setData報錯未定義

小程式setData報錯未定義

在wx:request()中使用setData會報這樣的錯誤

因為這裡的this是相對於wx:request()的當前物件,我們可以這樣解決:因為這裡的wx:rewuest()是在頁面載入時呼叫,所以我們可以在onLoad()中定義一個變數that ,將this賦值給that,那麼此時的that代表相對於onLoad()的當前物件,然後在success回撥函式中直接使用that.setData()即可。

onLoad: function () {
    var that= this;
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse){
      // 由於 getUserInfo 是網路請求,可能會在 Page.onLoad 之後才返回
      // 所以此處加入 callback 以防止這種情況
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    } else {
      // 在沒有 open-type=getUserInfo 版本的相容處理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    }

    wx.request({
      url: 'https://www.easy-mock.com/mock/5ba9a6c000414c65bd52368b/example/list',
      header: {
        'content-type': 'application/json' // 預設值
      },
      success(res) {
        var mockdata = res.data.data;
        console.log(mockdata.title);
        that.setData({
          motto: mockdata.title
        });
      }
    });
  }