国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

微信小程序首頁數據初始化失敗的解決方法

2019-12-12 04:05:43
字體:
來源:轉載
供稿:網友

一、 問題描述

用戶首次后再次進入小程序時,我們通常需要通過獲取用戶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.jsPage({ 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中就進行了,界面還沒渲染就跳轉了,所以速度很快,親測跳轉還算滿意,但終究還是繞個彎來做一件事,大家若有更好的方法,也請分享分享,謝謝!

以上所述是小編給大家介紹的微信小程序首頁數據初始化失敗的解決方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云梦县| 濮阳市| 西充县| 古田县| 临邑县| 博野县| 新绛县| 大田县| 郧西县| 舒城县| 南开区| 红河县| 浠水县| 萨迦县| 靖江市| 平陆县| 蒙阴县| 宁蒗| 高唐县| 新野县| 故城县| 桦川县| 南城县| 柳州市| 兴义市| 布拖县| 新密市| 东台市| 左权县| 同仁县| 旌德县| 皮山县| 南乐县| 宣威市| 右玉县| 庐江县| 射阳县| 柞水县| 桂阳县| 库伦旗| 梁平县|