收藏
回答

请问为什么这里this.setData报错了啊?

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

5 个回答

  • 亮子🌞
    亮子🌞
    05-21

    把success:function(res)改成success:(res)=>即可

    05-21
    有用 2
    回复 5
    • 竹林冰
      竹林冰
      05-21
      您好,这样好像也报错呢
      05-21
      回复
    • 亮子🌞
      亮子🌞
      05-21回复竹林冰
      你这外面是不是还有一层回调  success:function(res)都改成success:(res)=>
      05-21
      回复
    • 竹林冰
      竹林冰
      05-21回复亮子🌞
      是的,我改过了,但是现在好像open_id取值不到呢
      05-21
      回复
    • 亮子🌞
      亮子🌞
      05-21回复竹林冰
      你打印是同步   取openid是网络请求异步 这能取到才奇怪
      05-21
      1
      回复
    • 竹林冰
      竹林冰
      05-21回复亮子🌞
      好的,现在可以了,谢谢
      05-21
      回复
  • xy
    xy
    05-21

    代码全都发出来

    05-21
    有用 1
    回复 5
    • 竹林冰
      竹林冰
      05-21
      您好,代码如下:var common = require('../../utils/common.js');
      var Bmob = require("../../utils/bmob.js");
      var util = require("../../utils/util.js");
      var that;
      //var open_id='';//储存获取到openid
      const app = getApp()
      Page({
        data: {
          id:'',
          url:'',
          name:'',
          showAddr: false,
          showAddAddr: true,
          totalMoney: 0,
          goodMoney:0,
          price:0,
          showCoupon:false,
          fare: 0.00,
          allOrder: [],
          couponid:"",
          nickName:"",
          useCoupon:false,
          open_id:"",
          userInfo:[]
        },
        getUserInfo: function(e) {
          console.log("###222###"+e)
          app.globalData.userInfo = e.detail.userInfo
          this.setData({
            userInfo: e.detail.userInfo,
            nickName:e.detail.userInfo.nickName,
            hasUserInfo: true
          })
        },
        onShow() {
          //获取微信信息开始
          wx.getUserInfo({
            lang:"zh_CN",
            success: res => {
                console.log("#####微信授权res:"+res.userInfo.nickName);
                this.setData({
                  userInfo: res.userInfo,
                  nickName:res.userInfo.nickName
                })
            },
            fail: function () {
              console.log("微信未授权");
            }
          })
        },
        setCoupon(e) {
          let id = e.currentTarget.dataset.id;
          let price = e.currentTarget.dataset.price;
          this.setData({
            price: price,
            showCoupon: false,
            useCoupon:true,
            coupon: {
              id: id,
              price: price
            }
          })
        },
        getCoupon(){
          if(this.data.allOrder.length !=0){
            this.setData({
              showCoupon:true
            })
          }
        },
        getAddress() {
          wx.chooseAddress({
            success: (res) => {
              this.setData({
                showAddAddr: false,
                showAddr: true,
                name: res.userName,
                addrdetail: res.provinceName + res.cityName + res.countyName + res.detailInfo,
                tel: res.telNumber
              })
              let User = Bmob.Object.extend("_User");
              let query = new Bmob.Query(User);
              let currentUser = Bmob.User.current();
              let objectid = currentUser.id;
              query.get(objectid, {
                success: (result) => {
                  result.set('name', res.userName);
                  result.set('tel', res.telNumber);
                  result.set('addrdetail', res.provinceName + res.cityName + res.countyName + res.detailInfo);
                  result.set('mailcode', res.nationalCode);
                  result.save(null, {
                    success: (result) => {},
                    error: (result, error) => {
                      console.log('地址创建失败');
                    }
                  });
                },
                error: (object, error) => {
                  console.log(object)
                },
              });
            },
          })
        },
        onLoad(options) {
          that = this;
          this.setData({
            id: options.id,
            url: options.url,
            name: options.name,
            price: options.price,
            m_desc:options.m_desc
          })
        },
        //开始
        addOrder: function(){
          var that = this;
          if(that.data.userInfo.nickName == null){
            wx.showModal({
              title: '提示',
              content: '用户未授权,请点击授权!',
            })
          }else{
            this.getOpenIdTap();
            console.log("昵称:"+that.data.userInfo.nickName);
            console.log("商品id:"+that.data.id);
            console.log("商品名称:"+that.data.name);
            console.log("open_id:"+that.data.open_id);
          }
        },
        //结束
        getOpenIdTap:function(){
          var that=this;
          wx.login({
            success:(res)=>{
              console.log("#####输出:"+res.code)
              wx.request({
                  //获取openid接口
                url: 'https://*****/***/sc/***.do',
                data:{
                  js_code:res.code
                },
                method:'GET',
                success:(res)=> {
                  console.log("输出open_id###"+res.data.open_id),
                  this.setData({
                    open_id:res.data.open_id,//获取到的openid
                  })
                }
              })
            }
          })
        },
      });
      05-21
      回复
    • xy
      xy
      05-21回复竹林冰
      这里使用that
      05-21
      回复
    • 竹林冰
      竹林冰
      05-21回复xy
      好的,按照您的方法现在可以了,谢谢
      05-21
      回复
    • xy
      xy
      05-21回复竹林冰
      点个关注吧 以后有什么问题在社区发帖@我就好
      05-21
      1
      回复
    • 竹林冰
      竹林冰
      05-21回复xy
      好的,谢谢,已关注!
      05-21
      回复
  • talent
    talent
    05-21

    this 指向不对了

    05-21
    有用 1
    回复
  • They Say
    They Say
    05-21

    看你问题解决了,给你个提示。新手常见的this指向问题

    多了解一下箭头函数

    05-21
    有用
    回复
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    05-21
    ==========推荐在页面方法的最开始赋值let t = this==============
    func:function(){
      let t = this 
      .....
      wx.request({
        ...
        success: function(res)=>{
          t.setData({...})
        }
      })
    }
    ==========或者==============
    func:function(){
      wx.request({
        ...
        success: (res)=>{
          this.setData({...})
        }
      })
    }
    ==========或者==============
    func:function(){
      wx.request({
        ...
        success: function(res)=>{
          this.setData({...})
        }.bind(this)
      })
    }
    
    

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    05-21
    有用
    回复
登录 后发表内容
问题标签