【uni-app】【基于jQuery Ajax】[sd.js]最新原生完整版for凯哥API版本

简介: 【uni-app】【基于jQuery Ajax】[sd.js]最新原生完整版for凯哥API版本
import $g from "./sg";
//常用路径________________________________________________________________________________
const API_ROOT_URL = "https://www.shuzhiqiang.com/api"; //生产的IP
//一些前提条件和方法________________________________________________________________________________
//跳转到登录页面
const jumpLoginPage = () => {
    uni.clearStorageSync(); //清空对象键、值
  if (!location.href.includes('/pages/login/index')) {
    uni.redirectTo({
      url: `/pages/login/index?url=${encodeURIComponent(location.href)}`
    });
  }
}
// 请求报错提示
const errAlert = (url, d) => sgAlert(`【可能是后端报错】\n\r【接口地址】${url}\n\r【返回报文】${JSON.stringify(d, null, 4)}`);
// 普通报错提示
const sgAlert = (d) => {
  uni.showToast({
    icon: 'none',
    title: d
  });
}
//主体请求________________________________________________________________________________
export default {
  jumpLoginPage,
  API_ROOT_URL,
  imgPrePath: API_ROOT_URL + '/',
  //API FUNCTION ________________________________________________________________________________
  __sd(type, url, data, doing, otherConfig = {}) {
    type || (type = 'POST');
    //noAutoToken=true代表该接口无需保持登录状态就可以获取信息,譬如一些公共对外开放的接口
    let token = uni.getStorageSync('token'); //获取token
    if (!otherConfig.noAutoToken) {     
      if (!token) return jumpLoginPage();//判断如果本地没有token,否者直接跳转到登录页面
    }
    let headers = {
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    };
    if (!otherConfig.noAutoToken) {
      token && (headers["kkToken"] || (headers["kkToken"] = token));
      data || (data = {});
    }
    // 防止下载导出文件乱码
    let xhrFields = otherConfig.isDownload ? {responseType: "arraybuffer"} : null;
    // ________________________________________________________________________________
    doing.s && (doing.success = doing.s); //精简别名
    doing.f && (doing.fail = doing.f); //精简别名
    doing.e && (doing.error = doing.e); //精简别名
    doing.l && (doing.loading = doing.l, doing.loading.show && doing.loading.show()); //精简别名[加载]
    uni.request({
      ...xhrFields,
      method: type,
      url,
      data,
      header: headers,
      success: d => {
        d = d.data;
                // typeof d === 'string' && (d = JSON.parse(d));//如果是字符串返回值,则转换为JSON格式
        doing.loading && doing.loading.close && doing.loading.close(); //关闭加载
        if (otherConfig.isDownload) return doing.success(d); //如果是下载,直接返回文档流
        switch (d.success) {
          case true: //登录成功 ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ 
            doing.success && doing.success(otherConfig.isGetAllData ? d : (d.data || d));
            break;
          case false: //登录失败(当token密码失效的时候) ☠ ☠ ☠ ☠
            doing.fail ? doing.fail(d) : sgAlert(d.msg);
            break;
        }
        switch (d.code) {
          case 403: //登录失败(当token密码失效的时候) ☠ ☠ ☠ ☠
          case 404: //登录失败(当token密码失效的时候) ☠ ☠ ☠ ☠
            jumpLoginPage();
            doing.fail ? doing.fail(d) : sgAlert(d.msg);
            break;
          case -2: //扫码失败 ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ 
          case -1: //请求失败 ✖ ✖ ✖ ✖
            doing.fail ? doing.fail(d) : sgAlert(d.msg);
            break;
        }
      },
      error: d => { //请求报错 ✖ ✖ ✖ ✖
        if (d.status == 403) {
          jumpLoginPage();
          return doing.error ? doing.error(d) : sgAlert(JSON.parse(d.responseText).msg);
        }
        doing.loading && doing.loading.close && doing.loading.close(); //关闭加载
        doing.error ? doing.error(d) : errAlert(url, d);
        console.log("【报错】" + JSON.stringify(d, null, 4),d);
      },
    });
  },
  //【通用接口demo】________________________________________________________________________________
    API_NAME({ data, doing, config }) { this.__sd("post", `${API_ROOT_URL}/XXX/bill/print${$g.formatAsUrlParamString(data)}`, data, doing, config); },
    //提交用例________________________________________
    get({doing}) {
        this.__sd("get", `${API_ROOT_URL}/get.do`, null, doing) { isGetAllData: true };
    },
    post({data, doing}) {
        this.__sd("post", `${API_ROOT_URL}/post.do`, data, doing);
    },
    login({data, doing}) {
        this.__sd("post", `${API_ROOT_URL}/post.do`, data, doing, { noAutoToken: true });
    },
    download({data, doing}) {
        this.__sd("post", `${API_ROOT_URL}/post.do`, data, doing, { isDownload: true });
    },
}
相关文章
|
4月前
|
存储 机器学习/深度学习 API
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
755 31
Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
|
5月前
|
安全 API 开发者
鸿蒙NEXT-鸿蒙老版本迁移最新版本(API19,modelVersion5.1.1)
鸿蒙更新至API19,新增热更新支持、资源过滤、内存分析等功能。本文详解手动迁移步骤及上下文获取问题解决方案。
373 0
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
297 2
|
7月前
|
数据采集 搜索推荐 API
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
|
8月前
|
JSON JavaScript 数据格式
jqtimeline.js-简单又好用的jquery时间轴插件
jqtimeline.js-简单又好用的jquery时间轴插件
|
7月前
|
数据采集 API 数据格式
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
|
12月前
|
JavaScript 前端开发
js+jquery实现贪吃蛇经典小游戏
本项目采用HTML、CSS、JavaScript和jQuery技术,无需游戏框架支持。通过下载项目文件至本地,双击index.html即可启动贪吃蛇游戏。游戏界面简洁,支持方向键控制蛇移动,空格键实现游戏暂停与恢复功能。
288 14
|
12月前
|
JavaScript 前端开发 容器
jQuery多功能滑块插件r-slider.js
r-slider.js是一款jQuery多功能滑块插件。使用该插件,可以制作出滑块、开关按钮、进度条、向导步骤等多种效果。
179 5
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
272 1
|
前端开发 API 开发者
深度剖析:AJAX、Fetch API如何成为Python后端开发者的最佳拍档!
深度剖析:AJAX、Fetch API如何成为Python后端开发者的最佳拍档!
127 4