收藏
回答

app.js中给globalData赋值总是出错?

我在app.js的onLaunch里,用wx.login获取到code,然后在success里从后台获取到openid,但是给globalData的openid属性赋值时,总是出现 Cannot read property 'globalData' of null 错误,但是 下面的 wx.getSetting 方法里获取的 userinfo就能赋值正常,是怎么回事呢?

我的赋值语句: this.globalData.openid = res.data.data.openid;这名出错

在生成项目时里生成的那个代码:this.globalData.userInfo = res.userInfo,这句就很正常




回答关注问题邀请回答
收藏

3 个回答

  • 老张
    老张
    02-24

    在最前面加一句:let that = this

    02-24
    赞同
    回复
  • 我爱我家
    我爱我家
    02-24

    //app.js

    App({

      

      globalData: {

        host: '',

        baseUrl: '',

        urlLogin: '',

        userInfo: null,

        user: null,

        appid: ’***',

        secret: '***',

        openid: null,

        session_key: null

      },

      onLaunch: function() {

        // 展示本地存储能力

        var logs = wx.getStorageSync('logs') || []

        logs.unshift(Date.now())

        wx.setStorageSync('logs', logs)


        // 登录  

        wx.login({

          success: res => {

            console.log(res);

            wx.request({

              url: this.globalData.baseUrl + 'Login',

              data: {

                code: res.code

              },

              success: function(res) {

                console.log('res.data=');

                console.log(res.data.data);

                console.log(res.data.data.openid);

                console.log(res.data.data.session_key);

                wx.setStorageSync('openid', res.data.data.openid);

                //this.globalData.openid = res.data.data.openid; 这句错

               // this.globalData.session_key = res.data.data.session_key;

                var JsonData =res.data;

                console.log(JsonData);

              },

              fail: function(res) {

                console.log(res);

              },

              complete: function (res) {

                console.log('complete');

               // console.log(this.globalData.baseUrl);

               // this.globalData.userInfo = ''; 这个也错

              }

            })

          }

        })

        console.log('异步、同步?');

        // 获取用户信息

        wx.getSetting({

          success: res => {

            if (res.authSetting['scope.userInfo']) {

              // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框

              wx.getUserInfo({

                success: res => {

                  console.log('getSetting内');

                  // 可以将 res 发送给后台解码出 unionId

                  this.globalData.userInfo = res.userInfo //但是他这个不错


                  // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回

                  // 所以此处加入 callback 以防止这种情况

                  if (this.userInfoReadyCallback) {

                    this.userInfoReadyCallback(res)

                  }

                }

              })

            }

          }

        })

      },

      onShow:function()

      {

        

      }

    })

    02-24
    赞同
    回复
  • undefined
    undefined
    02-24

    你代码只抄了一半,没有注意 this指向问题

    02-24
    赞同
    回复 5
    • 我爱我家
      我爱我家
      02-24
      都帖上了
      02-24
      回复
    • 我爱我家
      我爱我家
      02-24
      方便 的话加个QQ吧,向你请教请教。309867165
      02-24
      回复
    • undefined
      undefined
      02-24回复我爱我家
      02-24
      回复
    • undefined
      undefined
      02-24回复我爱我家
      02-24
      1
      回复
    • 我爱我家
      我爱我家
      02-24
      谢谢,是this的作用域问题,我在wx.login前var that=this;然后用that引用,就正确了
      02-24
      回复
登录 后发表内容
问题标签