【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 });
    },
}
相关文章
|
30天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
504 1
|
3月前
|
JavaScript
鼠标事件(点击换色)分别使用js和jQuery代码实现
鼠标事件(点击换色)分别使用js和jQuery代码实现
42 1
|
6天前
|
数据采集 前端开发 JavaScript
虎扑APP数据采集:JavaScript与AJAX的结合使用
虎扑APP数据采集:JavaScript与AJAX的结合使用
|
1月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
526 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
19天前
|
JavaScript 定位技术
jQuery鹰眼视图小地图定位预览插件minimap.js
这是一个jQuery小地图定位预览视图,默认左侧是页面主要内容,minimap.js的好处就是在它的右侧形成一个快速定位通道,产生一个缩小版的页面,即预览效果,可以点击并快速定位到页面的某个位置。简单实用,欢迎下载!
29 0
|
2月前
|
负载均衡 API 数据安全/隐私保护
Zookeeper的客户端-原生的API
Zookeeper的客户端-原生的API
|
3月前
|
存储 JavaScript 前端开发
探索React状态管理:Redux的严格与功能、MobX的简洁与直观、Context API的原生与易用——详细对比及应用案例分析
【8月更文挑战第31天】在React开发中,状态管理对于构建大型应用至关重要。本文将探讨三种主流状态管理方案:Redux、MobX和Context API。Redux采用单一存储模型,提供预测性状态更新;MobX利用装饰器语法,使状态修改更直观;Context API则允许跨组件状态共享,无需第三方库。每种方案各具特色,适用于不同场景,选择合适的工具能让React应用更加高效有序。
79 0
|
3月前
|
JavaScript
分别用jquery和js修改页面元素
分别用jquery和js修改页面元素
36 2
|
3月前
|
JavaScript Java
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
20 1
|
3月前
|
XML JSON 前端开发
AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
32 0

热门文章

最新文章