sendAjax.小程序登录封装
2017-12-29 17:01
162 查看
sendAjax
首先,会接受三个参数
其次,调用前会确认是否有登录权限,或者G_authorization 的缓存信息
最后, 成功,200 =》调用成功的回调函数
401 =》登录失效,去重新登录
其他 =》处理失败
登录
login(拿到code)
用户同意
=》 getUserInfo (用户基本信息)
=》换unionId,拿到用户信息,设置全局变量
=》判断全局变量G_authorization,没有
=》 增加新的小程序账户
=》 刷新局部,或当前页面
首先,会接受三个参数
第一个参数为请求前的必要的数据(接口地址,需传参数等) 默认method为POST(特别调整了method值传入为大写) data为{} 第二个参数为回调函数(在调用之前,成功后,完成后) 默认调用前加正在加载提示,防止重复点击 完成后关闭正在加载提示 (特别:调用前的回调,是自己加的。) 第三个参数为需刷新的局部 防止整个页面刷新,少调几次后台
其次,调用前会确认是否有登录权限,或者G_authorization 的缓存信息
如果有G_authorization 的缓存信息或不需要登录权限,就是登录状态没问题,继续调用ajax 否则去重新登录。 (有G_authorization 的缓存信息:已有帐号才会有此变量)
最后, 成功,200 =》调用成功的回调函数
401 =》登录失效,去重新登录
其他 =》处理失败
失败 =》服务器连接失败 完成 =》调用完成的回调函数
登录
login(拿到code)
用户同意
=》 getUserInfo (用户基本信息)
=》换unionId,拿到用户信息,设置全局变量
=》判断全局变量G_authorization,没有
=》 增加新的小程序账户
=》 刷新局部,或当前页面
const HOST = require('../config.js') function sendAjax(options, callback, outTimeAuthCbOrNeedAuth) { // 登录信息过期处理类型 const OTCB = outTimeAuthCbOrNeedAuth || function () { getCurrentPages().pop().onLoad(getCurrentPages().pop().options) } const _sets = options if (typeof _sets.type === 'undefined') { _sets.type = 'POST' } if (typeof _sets.data === 'undefined') { _sets.data = {} } // 如果不是明确不需要登录权限 而且 没有 G_authorization 的缓存信息 if (outTimeAuthCbOrNeedAuth !== false && !wx.getStorageSync('G_authorization')) { getApp().uploadUserInfo(OTCB) return } // 纠正method大写 _sets.type = _sets.type.toUpperCase(); const bcallback = callback.beforeSend || function (data) { wx.showToast({ title: '正在加载...', icon: 'loading', duration: 10000 }) }; const scallback = callback.success || function (data) { }; const ccallback = callback.complete || function (data) { wx.hideToast() }; bcallback() wx.request({ url: HOST + _sets.url, method: _sets.type, data: _sets.data, header: { 'content-type': 'application/json', 'authorization': outTimeAuthCbOrNeedAuth !== false ? wx.getStorageSync('G_authorization') : '' }, success(res) { if (res.data.code == 200) { scallback(res.data) } else { if (res.data.code == 401) { getApp().uploadUserInfo(OTCB) } else { wx.showModal({ title: '提示', content: res.data.message || '处理失败', showCancel: false }); } } }, fail() { wx.showModal({ title: '提示', content: '服务器连接失败', showCancel: false }); }, complete() { ccallback() } }) } module.exports = sendAjax
//app.js /** * * 更新用户信息 * 1 授权登录 * 2 拿去用户信息 * 3 调用/user/account/platform/login 进行登录,有则拿取信息,无则进行注册 * 4 拿到用户信息后,没绑定手机号 单独在页面判断登录 * 5 老用户直接刷新页面,有自定义的回调就自定(cb),没有就刷新当前页面 * */ uploadUserInfo(cb) { const that = this wx.showNavigationBarLoading() wx.login({ success: (loginResult) => { that.globalData.platCode = loginResult.code wx.showNavigationBarLoading() wx.getUserInfo({ success: (userResult) => { // 拿取登录换取unionId 必要参数 let platUserInfoMap = that.globalData.platUserInfoMap platUserInfoMap["encryptedData"] = userResult.encryptedData platUserInfoMap["iv"] = userResult.iv that.globalData.platUserInfoMap = platUserInfoMap wx.showNavigationBarLoading() wx.request({ url: HOST + '/user/account/platform/login', method: 'POST', data: { platType: that.globalData.platType, platCode: that.globalData.platCode, platUserInfoMap: that.globalData.platUserInfoMap, weixinAppType: 3 }, header: { 'content-type': 'application/json' }, success: (res) => { if (res.data.code == "200") { that.globalData.unionId = res.data.unionId // 更新全局数据 wx.setStorageSync("G_unionId", res.data.unionId) wx.setStorageSync("G_userKey", res.data.userKey) wx.setStorageSync("G_nickName", res.data.userName) wx.setStorageSync("G_avatar", res.data.avatar) wx.setStorageSync("G_isBind", res.data.isBind) wx.setStorageSync("G_userId", res.data.userId) wx.setStorageSync('G_authorization', res.data.authorization) // 没绑定手机号 单独在页面判断登录 if (res.data.authorization == "") { wx.showNavigationBarLoading() wx.request({ url: HOST + '/user/account/weixinapp', method: 'POST', data: { unionId: res.data.unionId, nickName: res.data.userName, headimgurl: res.data.avatar }, header: { 'content-type': 'application/json' }, success: (resp) => { if (resp.data.code == 200) { wx.setStorageSync('G_authorization', resp.data.authorization) if (typeof cb === 'function') { cb(); } else { //获取当前页面,并刷新 getCurrentPages().pop().onLoad(getCurrentPages().pop().options) } } else { wx.showModal({ title: '提示', content: resp.data.message, showCancel: false }); } }, fail: () => { wx.showModal({ title: '提示', content: '服务器连接失败', showCancel: false }); }, complete: () => { wx.hideNavigationBarLoading() } }) // } else if (wx.getStorageSync("G_isBind") != 1) { // wx.showModal({ // title: '提示', // content: '请先绑定手机号,体验布管家全套纺织管理服务', // showCancel: false, // success: (res) => { // wx.navigateTo({ // url: '/page/center/bindPhone', // }) // } // }); } else { if (typeof cb === 'function') { cb(); } else { //获取当前页面,并刷新 getCurrentPages().pop().onLoad(getCurrentPages().pop().options) } } } else { wx.showModal({ title: '提示', content: res.data.message, showCancel: false }); } }, fail() { wx.showModal({ title: '提示', content: '服务器连接失败', showCancel: false }); }, complete: () => { wx.hideNavigationBarLoading() } }) }, fail: (userError) => { wx.showModal({ title: '提示', content: '若不授权微信登录,则无法使用相关功能;点击重新获取授权,则可重新使用。', cancelText: "不授权", confirmText: "授权", success: (res) => { if (res.confirm) { wx.openSetting({ success: (res) => { if (res.authSetting["scope.userInfo"]) { //获取当前页面,并刷新 getCurrentPages().pop().o 9e4d nLoad(getCurrentPages().pop().options) } } }); } else if (res.cancel) { // 同今天及,哦同里 恩 段 义 绝 wx.showModal({ title: '提示', content: '未授权,无法流畅使用主要功能', showCancel: false }); } } }); }, complete: () => { wx.hideNavigationBarLoading() } }); }, fail: function (loginError) { wx.showModal({ title: '提示', content: '微信登录失败,请检查网络状态', showCancel: false, success: (e) => { console.log('微信登录失败', e) } }); }, complete: () => { wx.hideNavigationBarLoading() } }); },
相关文章推荐
- 小程序ajax的封装技巧
- 利用AJAX实现简单的用户登录程序(处理服务端返回的文本数据)
- 封装ajax方法(统一处理登录超时异常)
- asp.net 使用一般处理程序和ajax post实现登录以及记住密码
- ajax配合一般处理程序(.ashx)登录的一般写法
- 小程序 ajax请求封装
- 在ASP.NET AJAX中使用应用程序服务和本地化(2):示例程序:实现用户登录和注销
- Ajax一个简单入门程序(用户登录验证)
- 微信小程序-封装http请求(ajax)
- javascript 【封装AJAX】
- 利用HttpRequest登录到某个网站,然后获取网站信息的程序示例
- Android_sendSms发短信小程序
- 利用java模拟网站登录程序代码
- C#程序中模拟帐号登录
- Spring Security教程(10)---- 自定义登录成功后的处理程序及修改默认验证地址
- JSP AJAX之Form序列化登录体验
- 8.3 为我们的web程序添加登录功能——flask-login
- JavaScript自己封装ajax的js
- Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- 实现一个基于Ajax的调查程序