在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
});
}
});
}
本文详细介绍了在微信小程序的wx:request中如何正确使用setData方法来更新数据,避免因作用域问题导致的错误。通过在onLoad函数中定义变量that并将其赋值为this,可以在请求成功后的回调函数中使用that.setData()来更新页面数据。
728

被折叠的 条评论
为什么被折叠?



