uni.app小程序的ajax封装详细讲解
我懒得说了
//放url相同的片段
const rootUrl = ""
// 示例: ajax({ url:'/api/login', param: param, method: "POST" });
export default function ajax(config, isLoading = true) {
let url = rootUrl + (config.url || '');
let param = config.param || {};
let method = (config.method || 'GET').toUpperCase();
let promise = '';
const headers = {
'Authorization': 'Bearer '+ uni.getStorageSync('token') || null,
...config.headers
};
// isLoading ? uni.showLoading({ title: '加载中...', }) : ''; // 中心显示加载中弹窗
return new Promise((resolve, reject) => {
setTimeout( () => { // 通过定时器实现真正的异步请求
uni.request({
url,
method,
data: param,
header: headers,
success(res) {
// console.log("ajax: res:", res);
if(!res){
reject('返回值已被您拦截!');
return;
}
// 获取Token。注:Web端为authorization,小程序端为Authorization。
if(res.header && (res.header.authorization || res.header.Authorization)){
// console.log('authorization:', res.header.authorization);
uni.setStorageSync('token', (res.header.authorization || res.header.Authorization));
}
if(res.statusCode !== 200){
// console.log("请求返回的状态码非200: " + url + " : "+ JSON.stringify(res))
reject(res);
return;
}
// 返回的数据体
if(res.data && res.data.err === 0 ){
resolve(res.data.data || {});
return;
}
else if( res.data.err >= 6000 && res.data.err <= 6999 ){
// console.log("ajax: unlogin:", res.data.err)
uni.showModal({
title:'登录提示',
content: res.data.msg || '您尚未登录',
success(e) {
// console.log("ajax: showModal:", e)
if (e.confirm) {
uni.redirectTo({
url:'/pages/login/login-account'
})
}
}
})
reject(res.data); //没登录点击我的 返回这个报错
}
else {
reject(res.data); //如果没有登录 其他页面返回这个报错
}
},
fail(err) { //接口失败调用
console.warn('ajax: fail:', err)
reject(err);
return;
},
complete() { //
// uni.hideLoading();
uni.stopPullDownRefresh()
},
})
}, 50);
});
}