sendAjax
首先,会接受三个参数
第一个参数为请求前的必要的数据(接口地址,需传参数等)
默认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().onLoad(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()
}
});
},