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);
    });
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值