❤❤❤【Vue.js最新版】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本❤❤❤

简介: ❤❤❤【Vue.js最新版】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本❤❤❤

sd.js源码

import $g from "./sg";//vue项目使用
import $ from 'jquery';//(提示:原生开发页面请前往https://jquery.com下载最新版jQuery)
import { Message } from "element-ui";//element项目使用
let isLocal = [
    "localhost",
    "127.0.0.1",
    "192.168",
    "0.0.0.0",
].some(v => location.href.includes(v)); //是否本地运行
//常用路径________________________________________________________________________________
let API_ROOT_URL = "http://xxx.xxx.com/api"; //生产的IP
if (isLocal) {
    API_ROOT_URL = "//192.168.1.xxx:8088/api"; //本地联调时候,开发者xxx的IP
}
//一些前提条件和方法________________________________________________________________________________
//跳转到登录页面
let jumpLoginPage = () => {
    $g.cookie.clearAll();//清空所有缓存(需要引入sg.js)
    Object.keys(localStorage).forEach(k => delete localStorage[k]);//清空对象键、值
    location.hash.includes('/login') || location.replace(`${location.origin}${location.pathname}#/login?url=${encodeURIComponent(location.href)}`);
}
// 普通报错提示
let sgAlert = (d) => Message ? Message.error(d) : alert(d);
// 报错提示
let errAlert = (url, d) => sgAlert(`【可能是后端报错】\n\r【接口地址】${url}\n\r【返回报文】${JSON.stringify(d, null, 4)}`);
//主体请求________________________________________________________________________________
export default {
    // 一些共享出去的变量
    $g,
    isLocal,
    API_ROOT_URL,
    imgPrePath: API_ROOT_URL + '/',
    // 一些共享出去的方法
    jumpLoginPage,
    //API FUNCTION ________________________________________________________________________________
    __sd(type, url, data, doing, otherConfig = {}) {
        // delete (data || {}).sgLog;//清除调试状态下的接口标记说明字段
        type || (type = 'POST');
        //noAutoToken=true代表该接口无需保持登录状态就可以获取信息,譬如一些公共对外开放的接口
        let token = localStorage.token; //获取token
        if (!otherConfig.noAutoToken) {
            //判断如果本地没有token,否者直接跳转到登录页面
            if (!token) return jumpLoginPage();
        }
        let headers = {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',//FormData方式提交数据
        };
        if (!otherConfig.noAutoToken) {
            token && (headers["kkToken"] || (headers["kkToken"] = token));
            data || (data = {});
        }
        // 防止下载导出文件乱码
        let xhrFields = otherConfig.isDownload ? { xhrFields: { responseType: "arraybuffer" } } : null;
        // 序列化设置(是否将数据转换为查询字符串的形式发送给服务器,默认情况下,processData的值为true)
        let processData = true;
        (data instanceof FormData) && (processData = false);
        (typeof otherConfig.processData !== 'undefined') && (processData = otherConfig.processData);
        // 精简别名
        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()); //加载
        $.ajax({
            timeout: 10 * 60 * 1000, //设置默认超时时间10分钟
            type,
            url,
            ...xhrFields,
            data,
            headers,
            processData,
            success: d => {
                // 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, r, config }) { this.__sd("post", `${API_ROOT_URL}/xxx/xxx/xxx`, data, r, config); },
    //提交用例________________________________________
    get({ r }) { this.__sd("get", `${API_ROOT_URL}/get.do`, null, r, { isGetAllData: true }); },
    post({ data, r }) { this.__sd("post", `${API_ROOT_URL}/post.do`, data, r); },
    login({ data, r }) { this.__sd("post", `${API_ROOT_URL}/post.do`, data, r, { noAutoToken: true }); },
    download({ data, r }) { this.__sd("post", `${API_ROOT_URL}/post.do`, data, r, { isDownload: true }); },
}

调用方式

let data = {
    ID: 1,
    sgLog: `强哥请求来源:${this.$options.name}`,
};
this.$d.接口名称({
    data,
    r: {
        s: d => {
            console.log("【成功】", d);
        }
    }
});

为了高效敏捷开发,写了一个基于上面的接口封装自动生成API请求代码片段的小工具

image.png


相关文章
|
2天前
|
存储 JavaScript 安全
在Node.js中,对于API的稳定性有哪些分级
在Node.js中,对于API的稳定性有哪些分级
|
8天前
|
JavaScript 应用服务中间件 API
Node.js搭建REST API实战:从基础到部署
【7月更文挑战第18天】通过以上步骤,你可以将你的Node.js REST API从开发环境顺利迁移到生产环境,并利用各种工具和技术来确保应用的稳定性、安全性和可扩展性。
|
11天前
|
前端开发 JavaScript API
惊呆了!学会AJAX与Fetch API,你的Python Web项目瞬间高大上!
【7月更文挑战第15天】AJAX和Fetch API是Web开发中的关键工具,用于异步前后端交互。AJAX借助XMLHttpRequest实现页面局部更新,而Fetch API是现代的、基于Promise的HTTP请求接口,提供更强大功能和简洁语法。结合Python Web框架如Django或Flask,利用这两者能创造无缝体验,提升项目性能和用户体验。学习并应用这些技术,将使你的Web应用焕发新生。**
21 5
|
11天前
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
【7月更文挑战第15天】Python后端(Django/Flask)与前端通过AJAX或Fetch API实现异步交互,提升Web应用体验。Python提供强大的后端支持,AJAX用于不刷新页面的数据交换,Fetch API作为现代标准,基于Promise简化HTTP请求。结合两者,构建高效、流畅的交互系统,优化响应速度和用户体验,开启Web开发新篇章。
23 5
|
13天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
【7月更文挑战第13天】在Web开发中,AJAX和Fetch API是实现页面无刷新数据交换的关键。在Flask博客系统中,通过创建获取评论的GET路由,我们可以展示使用AJAX和Fetch API的前端实现。AJAX通过XMLHttpRequest发送请求,处理响应并在成功时更新DOM。Fetch API则使用Promise简化异步操作,代码更现代。这两个工具都能实现不刷新页面查看评论,Fetch API的语法更简洁,错误处理更直观。掌握这些技巧能提升Python Web项目的用户体验和开发效率。
26 7
|
8天前
|
安全 Java API
Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
这篇文章介绍了Swagger,它是一组开源工具,围绕OpenAPI规范帮助设计、构建、记录和使用RESTAPI。文章主要讨论了Swagger的主要工具,包括SwaggerEditor、SwaggerUI、SwaggerCodegen等。然后介绍了如何在Nest框架中集成Swagger,展示了安装依赖、定义DTO和控制器等步骤,以及如何使用Swagger装饰器。文章最后总结说,集成Swagger文档可以自动生成和维护API文档,规范API标准化和一致性,但会增加开发者工作量,需要保持注释和装饰器的准确性。
Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
|
11天前
|
前端开发 JavaScript API
告别繁琐!AJAX与Fetch API,让你的前后端沟通畅通无阻,项目效率飙升!
【7月更文挑战第15天】AJAX与Fetch API革新了前后端通信,实现页面局部更新,提高用户体验。AJAX利用XMLHttpRequest异步交互,Fetch API则基于Promises,语法简洁。两者均简化了HTTP请求处理,加速项目开发。通过示例代码展示了如何使用它们进行数据请求与响应处理。拥抱这些技术,让Web应用更流畅,开发更高效!
15 2
|
11天前
|
前端开发 JavaScript API
惊天揭秘!AJAX与Fetch API如何让你的前后端交互秒变‘神级操作’!
【7月更文挑战第15天】在Web开发中,AJAX和Fetch API革新了前后端交互,告别了表单提交带来的页面刷新。AJAX利用XMLHttpRequest实现部分页面更新,开启无刷新时代;Fetch API作为现代替代,以其简洁和Promise支持简化异步操作。从AJAX的先驱地位到Fetch API的进化,两者提升了Web应用的性能和用户体验,成为现代开发的必备技能。
|
13天前
|
XML 前端开发 API
惊艳全场的秘诀!AJAX、Fetch API与Python后端,打造令人惊叹的Web应用!
【7月更文挑战第13天】构建现代Web应用的关键在于提供无缝用户体验,这涉及AJAX和Fetch API的异步数据交换以及Python(如Flask)的后端支持。Fetch API以其基于Promise的简洁接口,改进了AJAX的复杂性。例如,一个Flask应用可提供用户数据,前端利用Fetch API在不刷新页面的情况下显示信息。这种结合提升了效率,减少了服务器负载,是现代Web开发的趋势。随着技术发展,预期将有更多工具优化这一过程。
35 3
|
18天前
|
开发框架 监控 JavaScript
使用Node.js 框架( Express.js)来创建一个简单的 API 端点
【7月更文挑战第5天】使用Node.js 框架( Express.js)来创建一个简单的 API 端点
18 3