小程式setData報錯未定義
阿新 • • 發佈:2018-11-10
在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 }); } }); }