当前位置: 首页 > news >正文

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

相关文章:

  • 手把手教你做K均值聚类分析
  • 【JavaScript】LeetCode 383. 赎金信
  • java智慧农业水果销售系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • 1.初识jQuery
  • 影响关系分类汇总
  • JNI学习5.jstring的处理
  • android 各种偶现问题记录
  • 红黑树详解+模拟实现
  • 猿创征文 | Redis之 Jedis实例
  • 中秋征文“好文尝鲜奖”榜单公布,快来领取你的定制礼盒!
  • ACL访问控制列表 基础、创建ACL访问控制列表的两种方式、配置ACL访问控制列表规则、修改ACL规则的默认步长。子网掩码、反掩码、通配符掩码的区别和作用。
  • 面试官:我看你简历上写了MySQL,对MySQL InnoDB引擎的索引了解吗?
  • 微信小程序SEO指南
  • steam搬砖项目一直很稳定,部分反馈
  • Python调试指南
  • angular2开源库收集
  • golang 发送GET和POST示例
  • HTTP中GET与POST的区别 99%的错误认识
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • js
  • Protobuf3语言指南
  • Python 反序列化安全问题(二)
  • 京东美团研发面经
  • 世界上最简单的无等待算法(getAndIncrement)
  • Semaphore
  • 整理一些计算机基础知识!
  • ​2020 年大前端技术趋势解读
  • ​MySQL主从复制一致性检测
  • #、%和$符号在OGNL表达式中经常出现
  • (175)FPGA门控时钟技术
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (ros//EnvironmentVariables)ros环境变量
  • (二)fiber的基本认识
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)Scala的“=”符号简介
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • @Query中countQuery的介绍
  • @RequestMapping 的作用是什么?
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [C语言]——函数递归
  • [LeetCode]剑指 Offer 42. 连续子数组的最大和
  • [Linux] Linux入门必备的基本指令(不全你打我)
  • [Linux]Ubuntu noVNC使用
  • [MYSQL]mysql将两个表结果合并到一起
  • [NCTF 2022] web题解
  • [NCTF2019]True XML cookbook
  • [New Portal]Windows Azure Virtual Machine (3) 在VM上挂载磁盘
  • [NOIP2017 提高组] 列队 题解
  • [PHP]关联和操作MySQL数据库然后将数据库部署到ECS
  • [SpringMVC] SpringMVC入门