【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 });
    },
}
相关文章
|
2月前
|
安全 API Swift
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
130 15
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
|
1月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
2月前
|
JSON JavaScript 数据格式
jqtimeline.js-简单又好用的jquery时间轴插件
jqtimeline.js-简单又好用的jquery时间轴插件
|
2月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
3月前
|
供应链 数据挖掘 API
1688APP 原数据 API 接口的开发、应用与收益
1688作为阿里巴巴旗下的B2B平台,汇聚海量供应商和商品资源。其APP原数据API接口为开发者提供获取商品详细信息的强大工具,涵盖商品标题、价格、图片等。通过注册开放平台账号、申请API权限并调用接口,开发者可构建比价工具、供应链管理及自动化上架工具等应用,提升用户体验与运营效率,创造新的商业模式。示例代码展示了如何使用Python调用API并解析返回结果。
217 8
|
4月前
|
供应链 数据挖掘 API
1688app 商品详情接口系列(1688API)
1688作为国内知名批发采购平台,提供了一系列商品详情接口(API),助力企业和开发者获取商品基础、价格、库存及供应商信息。通过Python示例代码展示如何调用这些接口,应用场景涵盖采购决策辅助、数据分析与市场调研、电商平台整合及供应链管理系统的优化,为企业和采购商提供有力的数据支持,提升业务效率和竞争力。
182 15
|
4月前
|
JavaScript 前端开发 安全
盘点原生JS中目前最没用的几个功能API
在JavaScript的发展历程中,许多功能与API曾风光无限,但随着技术进步和语言演化,部分功能逐渐被淘汰或被更高效的替代方案取代。例如,`with`语句使代码作用域复杂、可读性差;`void`操作符功能冗余且影响可读性;`eval`函数存在严重安全风险和性能问题;`unescape`和`escape`函数已被`decodeURIComponent`和`encodeURIComponent`取代;`arguments`对象则被ES6的剩余参数语法替代。这些变化体现了JavaScript不断优化的趋势,开发者应紧跟技术步伐,学习新技能,适应新技术环境。
68 10
|
4月前
|
JSON 数据挖掘 API
京东app商品详情API接口系列(京东 API)
本文介绍了使用 Python 调用京东商品详情 API 的方法。前期需安装 `requests` 库处理 HTTP 请求,导入 `json` 库解析 JSON 数据。接口通过商品 ID 获取详细信息,如价格、图片、评价等。示例代码展示了如何构建请求并处理响应数据。应用场景包括电商开发、市场调研和数据分析等,帮助提升用户体验、优化推荐系统及制定市场策略。
|
4月前
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
142 5
|
5月前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
363 6