请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

获取OPENID并使用的问题

https://img1.sycdn.imooc.com//szimg/5a7c0ba800012c6a06700767.jpg

如上图所示,我在全局函数里面先用code码去请求后端的获取openId接口,然后在页面加载onLoad的时候,想用openId去调其它接口,来初始化页面的一些数据信息,现在发现,当我要用到openId的时候,返回拿不到,原因在于全局onLaunch的时候,它发现接口数据还没有返回,它就接着先加载页面的onLoad了,这时候,onLoad里面的函数要用openId,发现onLaunch的请求,接口还没有给它返回openId,所以页面onLoad的时候,就无法通过openId去做一些初始数据,请问老师,这样的情况,该怎么去处理它?是我哪里的思路错了吗?


正在回答 回答被采纳积分+3

1回答

7七月 2018-02-08 22:25:50

这个其实没有太好的解决办法,本身就是异步的,唯一的解决方法是,onload里面如果发现缓存中没有openid,可以去服务器去取。你TP5课程里有讲这个方案。还有你的openid真不应该返回到客户端。

0 回复 有任何疑惑可以回复我~
  • 提问者 MaybeOneday #1
    昨天在群里,在其他同学的帮助下,使用回调函数,把这个问题解决了。我数据库里面设计的时候,就想用openId来表示这个用户是唯一的,所以我拿取数据都是用openId做唯一的标识,因为只设计了一张表,所以我不知道要不要做,登入的请求的时候,就给这个用户先生成一个唯一标识,然后用户就用这个唯一标识来调接口,而openId就作为调用微信小程序接口的凭证去使用,而不作为这个用户的唯一标识,是这样的意思吗?
    回复 有任何疑惑可以回复我~ 2018-02-09 10:15:27
  • 7七月 回复 提问者 MaybeOneday #2
    最好的方法还是在http请求里做一次二次调用,如果没有令牌则获取令牌。openid官方文档明确说过不建议传回客户端。如果你做服务器还是要系统的看看文档或者是相关课程。你的很多做法都不太正确。
    回复 有任何疑惑可以回复我~ 2018-02-09 11:40:48
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信