评论

【转载】报错:TypeError: Cannot read property ‘setData‘ of undefine

报错:TypeError: Cannot read property ‘setData‘ of undefine

微信小程序 报错:TypeError: Cannot read property ‘setData’ of undefined

在完成微信小程序的一个功能时,偶然间报了一个错误。

错误信息是:TypeError: Cannot read property ‘setData’ of undefined。将相关情况描述和如何解决与大家分享一下


错误截图



出错代码

每当我执行homework这个函数时,我发送一个request请求,将获取的数据存导本地的数组中。故我在sucess:function(res){}中使用了this.setData({})。


  homework: function () {

    if (this.data.homeworkpageFlag == false) {

      console.log(this)

      this.setData({

        homeworkpageFlag: true,

        saypageFlag: false,

        exampageFlag: false,

      })

    }

    wx.request({

      url: '某url hhhhh',

      data: {

        student_id: '某学号',

      },

      method: 'POST',

      header: {

        'content-type': 'application/x-www-form-urlencoded'

      },

      success: function(res) {

        console.log(res.data)

        this.setData({

          homeworkNoCompleteList: res.data.data.homeworkNoCompleteList

        })

      }

    })


  },


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

理想很美好,但是每次执行就会报上面的错误。


解决方案

var that = this;

ES6的箭头函数

方案一、var that = this;

添加 var that = this;并把sucess中的this.setData改成that.setData


homework: function () {

    if (this.data.homeworkpageFlag == false) {

      console.log(this)

      this.setData({

        homeworkpageFlag: true,

        saypageFlag: false,

        exampageFlag: false,

      })

    }

    //添加var that = this

    var that = this;

    wx.request({

      url: 'https://fanzaixuexi.applinzi.com/public/index.php/index/GetInformation/get_all_assignment',

      data: {

        student_id: '某学号',

      },

      method: 'POST',

      header: {

        'content-type': 'application/x-www-form-urlencoded'

      },

      success: function(res) {

        console.log(res.data)

        //改成了that.setData

        that.setData({

          homeworkNoCompleteList: res.data.data.homeworkNoCompleteList

        })

      }

    })

  },


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

成功解决问题。


方案二、ES6箭头函数;


  homework: function () {

    if (this.data.homeworkpageFlag == false) {

      console.log(this)

      this.setData({

        homeworkpageFlag: true,

        saypageFlag: false,

        exampageFlag: false,

      })

    }

    wx.request({

      url: '某url',

      data: {

        student_id: '某id',

      },

      method: 'POST',

      header: {

        'content-type': 'application/x-www-form-urlencoded'

      },

      success: (res)=> {

        console.log(res.data)

        // var that = this;

        this.setData({

           // 我要获取的数据

        })

        console.log(this.data.homeworkYesCompleteList.length)

      }

    })


  },

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

把 sucess:function(res){}改成 sucess:(res)=>{}

就可以大大方方地使用 this.setData了

————————————————

版权声明:本文为CSDN博主「Silam Lin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_43263320/article/details/113706520

最后一次编辑于  2022-07-16  
点赞 0
收藏
评论
登录 后发表内容