收藏
回答

wx.redirectTo 跳转问题,返回ok 但就是不跳转?

库版本:2.16.0

场景:用户通过体验版 扫码进入小程序,在 app.js 中进行登陆验证,通过判断返回的值中是否存在token 来进行是否跳转。

无缓存情况下,首次扫码体验码,进入小程序后 正常跳转,但是当关掉小程序 再次扫码 就不再跳转,wx.redirectTo 返回的是 ok

App({

  // 初始化完成

  onLaunch: function(option) {

// 判断登录状态

    this.checkLogin();

  },


  // 全局对象

  globalData: {

    userArr: null,      // 平台用户信息

  login: false,       // 是否正在执行登录

    openid: null

  },


  // 主机

  // host: "http://10.1.10.180:8080/",


  // 回调函数数组

  wxReadyCallbackArr: [],


  // 登陆校验

  checkLogin: function() {

    // 缓存

  this.globalData.userArr = wx.getStorageSync("userArr");


    // 检查session

    wx.checkSession({

      success: () => { // 有效期内

        if(!this.globalData.userArr.token) {

          this.wxLogin();

        }

      },

      fail: (res) => {

       // this.wxLogin();

      }

    })

  },


  // 登录

  wxLogin: function(cb = null) 

  {

  if(cb) this.wxReadyCallbackArr.push(cb);

  if(this.globalData.login) return;


    wx.showLoading({

      title: '登陆中',

      mask: true

    })


    // 更改状态防重复登陆

    this.globalData.login = true;

    return wx.login({

      success: res => {

        this.login(res.code);

      },

      fail: res => {

        wx.showToast({

          title: "登录失败!",

          image: "/images/fail.png",

          mask: true

        })

      }

    })  

  },


  // 登录请求

  login(code) {

    (async () => {

      try {

        let datas = {"code": code};

        const res = await request("login", JSON.stringify(datas), "POST", true)

        console.log(res)

        let data = res.data;

        if(parseInt(data.resultCode) == 200) {


          this.globalData.openid = data.data.openid;


          // 不存在token, 跳转进入注册申报页

          if(!data.data.token) {

            // 二次扫码不跳转bug

            wx.redirectTo({

              url: '/pages/company/reg',

              success(res) {

                console.log(res)

              },

              fail(res) {

                console.log(res)

              }

            })

          } else {

            // 缓存token

            let userArr = {token: data.data.token};

            wx.setStorageSync("userArr", userArr);

            this.globalData.userArr = userArr;

      

            // 执行回调

            if(this.wxReadyCallbackArr.length > 0) {

              for(let value of this.wxReadyCallbackArr.values()) {

                typeof value == "function" && value();

              }

              this.wxReadyCallbackArr = []; // 清空

            }

            this.globalData.login = false;

          }

          return;

        }

        

        if(data.message) {

          wx.showToast({

            title: data.message,

            icon: "none",

            mask: true

          })

        }

      } catch (err) {

        this.globalData.login = false;

      }

    })();

  }

}


最后一次编辑于  2021-04-19
回答关注问题邀请回答
收藏

2 个回答

  • 微盟
    微盟
    2021-04-19

    检查app.json是否注册页面、是否是tab页面需要用reLaunch或者switchTab、跳转路径是否正确

    2021-04-19
    有用
    回复 1
    • 周涛
      周涛
      2021-04-19
      这些都没有问题,要跳转到的页面非tab 导航按钮,app.js 仅仅作为获取openid 和 token(用户一旦注册成功,那么app.js code 过去 是会返回 openid + token), 但是如果 未注册 则只返回 openid 然后token 为空,此时需要跳转到 注册界面 提交申报信息,信息成功提交 返回 token(此时token 缓存掉)
      2021-04-19
      回复
  • showme
    showme
    2021-04-19

    得亮代码,这样定位不出啥问题

    2021-04-19
    有用
    回复 5
    • 周涛
      周涛
      2021-04-19
      帮忙看下,二次扫码后 能执行到并输出 wx.redirectTo 的 success 值 是 ok 的,就是不跳转。程序检查了多遍 没发现问题
      2021-04-19
      回复
    • showme
      showme
      2021-04-19回复周涛
      看代码感觉 第二次扫码的时候感觉已经有this.globalData.userArr.token 的值了,但是你说已经执行到 wx.redirectTo,多增加一点打印信息。
      而且看你想要的功能,就是第二次不需要跳转吧?
      2021-04-19
      回复
    • 周涛
      周涛
      2021-04-19
      没有,token 是需要跳转到的那个 reg 页面注册后 才能获得,所以第一次扫码进入 成功跳转过去,但此时不提交注册信息,直接关掉小程序 然后再次扫码 就不跳转了
      2021-04-19
      回复
    • showme
      showme
      2021-04-19回复周涛
      没碰到过这种问题,用 wx.navigateTo试试
      2021-04-19
      回复
    • 周涛
      周涛
      2021-04-20
      一样的,最好换成在首页去判断跳转了
      2021-04-20
      回复
登录 后发表内容