微信小程序首页数据初始化失败的解决方法

一、 问题描述

用户首次后再次进入小程序时,我们通常需要通过获取用户openid或unionid用作唯一标示与后台进行数据交流,初始化用户信息。当我们通过第三方服务器跟微信建立请求时,微信需要用户确认是否公开信息。如图1,从console可以看到,在请求的同时,我们的首页index已经加载完成,图中初始化数据显示为空。无论我们将请求信息写在app.js的onload中或者index.js中,当我们点击确认后,请求信息才执行success方法,将第三方服务器返回的数据处理,这样的因需要用户点击而产生的滞后性,我们很难要求程序停下来等我们。那么,我们可以通过其他途径,来达到让程序“停下来”的错觉,下面容我来介绍一下我的解决方法。

图1

二、 解决方法的最基本要求

我们想要的解决方法的最基本要求有如下两点:

1) 当我们进入主页,数据完成了初始化,并正常显示

2) 当用户首次进入程序,只需确认确认公开信息,即可正常进入主页

三、 解决方法

我的解决方法是:通过设计一个“临时加载页”来达到我们想要的效果,这个临时加载页类似于Android的欢迎界面,但当数据加载完成,或者我在第二次进入时,将自动跳转到我们的主页。下面是设计代码部分。

步骤一:首先我们在app.json中,创建一个新的page,命名为welcome

"pages/welcome/welcome"

注意该page要放置在首页,也就是程序进来第一个页面

步骤二:我们在welcome.js中,将具体请求操作写入到onload中

// pages/welcome/welcome.js Page({ data:{}, onLoad:function(options){ // 页面初始化 options为页面跳转所带来的参数 var that = getApp() try { //首先检查缓存中是否有我们需要请求的数据,如果没有,我们再跟服务器连接,获取数据 //首次登陆肯定是没有的 that.globalData.userInfo = wx.getStorageSync('userInfo') if(wx.getStorageSync('userInfo')!=''){ //如果缓存不为空,即已经存在数据,我们不用再跟服务器交互了,那么直接跳转到首页 wx.switchTab({ url: '../index/index', }) } if (value) { // Do something with return value console.log(that.globalData.userInfo) } } catch(e){ // Do something when catch error //当try中的缓存数据不存在时,将跳到这步,这步中,我们将与服务器进行连接,并获取数据 if(that.globalData.userInfo == ''){ wx.login({ success: function(res) { //获取用户code,转发到我们的服务器,再在我们服务器与微信交互,获取openid var code = res.code wx.getUserInfo({ success: function(userInfo) { var encryptedData = userInfo.encryptedData var iv = userInfo.iv //我们服务器请求地址 var url = that.apiHost + 'index/login' var userinfo = userInfo.userInfo var username = userinfo.nickName var useravatar =userinfo.avatarUrl var usersex=userinfo.gender wx.request({ url: url, method: 'POST', data: { 'code': code, 'username':username, 'useravatar':useravatar, 'usersex':usersex }, header: { "Content-Type": "application/x-www-form-urlencoded" }, success:function(response) { //数据交互成功后,我们将服务器返回的数据写入全局变量与缓存中 console.log(response.data) //写入全局变量 that.globalData.userInfo = response.data wx.hideToast() //写入缓存 wx.setStorage({ key: 'userInfo', data: that.globalData.userInfo, success: function(res){ console.log("insert success") }, fail: function() { // fail }, complete: function() { // complete } }) //写入后,我们将跳转到主页 wx.switchTab({ url: '../index/index', }) }, failure: function(error) { console.log(error) }, }) } }) } })} } }, onReady:function(){ // 页面渲染完成 }, onShow:function(){ // 页面显示 }, onHide:function(){ // 页面隐藏 }, onUnload:function(){ // 页面关闭 }, redirect:function(){ wx.switchTab({ url: '../index/index', }) } })

可看到,我们在首次登陆时,将进入我们的欢迎界面,当用户确认公开信息后,页面将自动跳转到首页,首页数据正常显示

在第二次进入时,跳转在onload中就进行了,界面还没渲染就跳转了,所以速度很快,亲测跳转还算满意,但终究还是绕个弯来做一件事,大家若有更好的方法,也请分享分享,谢谢!

以上所述是小编给大家介绍的微信小程序首页数据初始化失败的解决方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

时间: 2024-09-09 09:11:58

微信小程序首页数据初始化失败的解决方法的相关文章

微信小程序 wx.uploadFile无法上传解决办法_JavaScript

微信小程序 wx.uploadFile无法上传解决办法 微信安卓客户端无法使用wx.uploadFile上传文件的问题有不少开发者都遇到. 我也因为一直不能解决,硬着头皮提交审核最后被拒(抱着审核者最好用iOS检测的心态,不巧审核我应用的用的是安卓),才尝试使用第三方的手段解决. 最终我是用了七牛第三方存储的方式,将文件直接上传至七牛的储存的空间上再回调使用. 当然像又拍云,万象优图这些第三方存储源都可以采用这种思路. 首先是将七牛的https上传域名放进小程序的域名名单中. 这里我使用的是七牛

应用程序正常初始化失败的解决方法

应用程序正常初始化(0xc00000ba)失败的症状:无法正常启动杀毒软件.防火墙.QQ聊天软件等: 导致应用程序正常初始化失败的原因分析: 出现(0xc00000ba)的错误代码表示系统无法正常调用ws2_32.dll动态连接库文件导致的,ws2_32.dll是 Windows Sockets应用程序接口,它向系统提供网络应用程序的接口支持,某些病毒木马为了达到禁止杀毒软件和防火墙启动的目的,在杀软目录或System32 目录下创建一个假的傀儡ws2_32.dll,该文件与正常文件名一模一样,

微信小程序 跳转页面的两种方法详解

微信小程序 跳转页面 小程序页面有2种跳转,可以在wxml页面或者js中: 1,在wxml页面中: <navigator url="../index/index">跳转到新页面</navigator> <navigator url="../index/index" open-type="redirect">在当前页打开</navigator> <navigator url="../i

PP表情精灵初始化失败的解决方法

  打开工具箱→pp表情精灵,出现问题:应用程序初始化失败 回答: 下载ihelper.dll 后放在表情精灵的文件夹替换后重新打开就可以了.

sql server 2000管理单元初始化失败的解决方法

使用SQL Server 2000数据库,在打开企业管理器时出现SQL Server管理单元初始化失败错误:窗口名是:MMC SQL Server管理单元初始化失败 名称:Microsoft SQL企业管器 CLSID{00100100-1816-11d0-8EF5-00AA0062C58F} 在网上找了半天多数SQL Server管理单元的解决方法都是要重装数据库,实在是太麻烦了,基本上没发现有实效的解决办法,最后通过自己的努力终于找到了一个快捷的SQL Server管理单元解决方法,将下面的

微信小程序初使心得【微信小程序快速入门】

摘要: 2016年推出微信小程序,时至今日,历经几个版本的更新,已形成了相对实用和稳定的服务平台.本文简单的介绍了微信小程序的入门用法,今后会继续关注和实践.           2016年推出微信小程序,时至今日,历经几个版本的更新,已形成了相对实用和稳定的服务平台.本文简单的介绍了微信小程序的入门用法,今后会继续关注和实践.      2017年,春节刚过,想来,已经过了三四个工作日.接下来,期待的莫过于,十五的元宵. 近日,在工作闲暇之余,阅读了一些关于微信小程序的文章,忍不住,想动手试他

支付宝社交风波以道歉收场,微信小程序会有不同结局吗?

针对"校园日记"."白领日记"两个圈子中大尺度照片带来的争议,支付宝于 29 日发布了道歉声明,表示会立即解散所有打擦边球的圈子.目前,据网友反映,支付宝首页已搜不到上述两个圈子. 继旺信.来往.钉钉之后,支付宝平台已经成为"阿里巴巴社交之心不死"的新凭证.好的社交平台如微信,具有高频使用.用户黏性大的优势,这是阿里的支付宝亟待补齐的短板.随着微信发力移动支付市场,支付宝更应加快布局. 然而,这次支付宝的尝试,除了说明产品经理"坑公司&

微信小程序设置http请求的步骤详解_相关技巧

http请求介绍 HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则.计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请

微信小程序会让前端开发者失业

这两天微信小程序的内测,被这个事件刷屏,让很多前端开发者感觉以后就是铁饭碗了.而我作为一个将近10年的前端开发者,恰恰看到了事情的另外一面,前端开发开发者的饭碗会被后端开发同学,设计师,产品经理以及其他想学习开发小程序的人占领,大部分低水平前端开发者面临失业.我为什么这样说,下面我来给大伙分析下原因: 我们想想在没有微信小程序的时候,前后端怎么来分工: 前端工程师 开发基础组件,页面的静态样式,交互 后端工程师 开发业务逻辑和把数据套在前端写好的静态页面上. 最不擅长是写页面布局,页面交互,开发