js Ajax函数封装及使用

直接上代码

一、ajax函数封装
/*** ajax函数* @param {Object} options 请求传入的对象参数*/
function ajax(options = {}) {// 1. 参数校验// 校验请求地址必传,而只能是字符串类型if (!options.url || typeof (options.url) != 'string') throw Error('url必传,只能是字符串');// 校验请求方式 只能是post或get 或者不传递if (!(typeof options.method === 'undefined' || /^(get|post)$/i.test(options.method))) throw Error('method只能是post或get');// 校验请求方式 只能是post或get 或者不传递if (!(typeof options.dataType === 'undefined' || /^(string|json)$/i.test(options.dataType))) throw Error('dataType只能是json或string');// 校验携带的参数 只能是对象 或者不传递if (!(typeof options.data === 'undefined' || Object.prototype.toString.call(options.data) === '[object Object]')) throw Error('data只能是对象');// 校验请求是否异步 只能是布尔类型 或者不传递if (!(typeof options.async === 'undefined' || typeof options.async === 'boolean')) throw Error('async只能是布尔值');// 校验请求头 只能是对象 或者不传递if (!(typeof options.header === 'undefined' || Object.prototype.toString.call(options.header) === '[object Object]')) throw Error('header只能是对象');// 校验成功函数 只能是函数 或者不传递if (!(typeof options.success === 'undefined' || typeof options.success === 'function')) throw Error('success只能是函数');// 校验错误函数 只能是函数 或者不传递if (!(typeof options.error === 'undefined' || typeof options.error === 'function')) throw Error('error只能是函数');// console.log( options )// 2. 准备ajax请求的默认值let defInfo = {url: options.url,method: options.method ? options.method : 'get',data: options.data ? options.data : {},dataType: options.dataType ? options.dataType : 'string',async: typeof options.async==='boolean'?options.async:true,//?? 空值合并运算符  当左侧的操作数为null 或者undefined 时,返回其右侧操作数,否则返回左侧操作数。//async: options.async ?? true,header: { 'content-type': 'application/x-www-form-urlencoded', ...options.header },success: options.success ? options.success : () => { },error: options.error ? options.error : () => { },}// console.log( defInfo )// 3. 组装查询字符串let queryStr = '';// 遍历defInfo.datafor (const key in defInfo.data) {queryStr += `${key}=${defInfo.data[key]}&`;}queryStr = queryStr.slice(0, -1);// 判断是否将查询字符串拼接到 地址中if (/get/i.test(defInfo.method)) defInfo.url += `?${queryStr}`;// 创建ajax对象let xhr = new XMLHttpRequest();// 配置请求信息xhr.open(defInfo.method, defInfo.url, defInfo.async);// 设置请求头for (const key in defInfo.header) {xhr.setRequestHeader(key, defInfo.header[key])}// 发送请求/post/i.test(defInfo.method) ? xhr.send(queryStr) : xhr.send();// 接受响应xhr.onload = function () {let res = xhr.responseText;try {// 判断是否需要json转换if (defInfo.dataType === 'json') {res = JSON.parse(res);}// 执行成功回调---将接受的响应数据作为实参传递defInfo.success(res)} catch (err) {// 执行失败回调---将接受的异常信息作为实参传递defInfo.error(err)}}
}
二、使用
<script src="./ajax.js"></script>
<script>// throw Error('异常了')ajax({url:'http://localhost:8888/users/login',// url:'http://localhost:8888/test/first',method:'post',data:{username:'admin',password:123456},// async:false,    dataType:'json',// header:{'authorization':'123456','content-type':'application/json'},success:(res)=>{console.log( res )},error:(r)=>{console.log( r )}})</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每天发布1000个视频SOP之账号管理:抖音可用的上传管理账号的浏览器安装包23个

企业抖音运营&#xff1a; 全流程整套操作SOP&#xff0c; 每天发布1000个视频工作管理体系&#xff1a; &#xff08;因为上传限制&#xff0c;分成3个压缩包资源上传&#xff09; 这是其中的&#xff1a;SOP矩阵划管理登录抖音平台账号&#xff0c;上传管理运营账号&#…

FreeRtos进阶——队列的特殊用途

信号量与互斥量都一样&#xff0c;都是特殊的队列。但是只有互斥量实现了优先级继承机制。 信号量与互斥量与队列一样&#xff0c;在操作增加或者减少时&#xff0c;必须先关中断在进行操作&#xff01; 信号量创建揭秘 图中信号量的创建过程&#xff0c;在代码中的体现本质就是…

设计模式 16 解释器模式 Interpreter Design Pattern

设计模式 16 解释器模式 Interpreter Design Pattern 1.定义 解释器模式 (Interpreter Design Pattern) 是一种行为型设计模式&#xff0c;它定义了一种语法表示&#xff0c;并提供了一种解释器来解释该语法表示的句子。 核心概念&#xff1a; 语法表示 (Grammar): 定义了…

如何使用 jQuery 库来删除 HTML 页面中指定的元素下的所有子元素,但是保留其中一个特定的子元素

如何使用 jQuery 库来删除 HTML 页面中指定的元素下的所有子元素&#xff0c;但是保留其中一个特定的子元素 示例如下&#xff1a; 假设我们有以下的 HTML 代码&#xff1a; <div id"container"><div id"header">Header</div><div…

现在股票交易佣金标准最低是万0.854,低佣金炒股开户方式和流程!

股票交易佣金的最低标准是万分之0.854&#xff1b; 证券公司股票交易佣金默认是万分之3&#xff1b; 无门槛的股票交易佣金是万分之1&#xff1b; 万分之0.854的佣金要求投资者资产达到一定规模&#xff0c;不同的证券公司规定不一样。 如果没有经过证券公司客户经理协商开…

【SQL学习进阶】从入门到高级应用(一)

文章目录 MySQL命令行基本命令数据库表的概述初始化测试数据熟悉测试数据 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01; &#x1f49d;希望您在这里可以感受到一份轻松愉快的氛围&#x…

SolidityFoundry 安全审计测试 tx.origin 漏洞

名称&#xff1a;tx.origin 漏洞 solidityproject/vulnerable-defi at master XuHugo/solidityproject GitHub 说明&#xff1a; tx.origin是Solidity中的一个全局变量&#xff1b;智能合约中使用该变量进行身份验证&#xff0c;会使合约容易受到网络钓鱼攻击。 msg.sende…

C++牛客周赛43题目分享(3)小红平分糖果,小红的完全平方数,小苯的字符串变化,小红的子数组排列判断

目录 ​编辑 1.前言 2.四道题目 2.1小红平分糖果 2.1.1题目描述 2.1.2输入描述 2.1.3输出描述 2.1.4示例 2.1.5代码 2.2小红的完全平方数 2.1.1题目描述 2.1.2输入描述 2.1.3输出描述 2.1.4示例 2.1.5代码 2.3小苯的字符串变化 2.1.1题目描述 2.1.2输入描述 …

Java 原子变量 一次通关

前言 Java中的原子变量是用于实现无锁的线程安全编程的一种机制。它们是java.util.concurrent.atomic包中的一部分&#xff0c;这个包提供了一系列原子类&#xff0c;用于执行原子操作。 主要类型 Java的原子包提供了多种原子类&#xff0c;包括&#xff1a; 基本类型&…

想自学编程,看编程书有些看不懂,下一步应该怎么办?

不管你从事什么工作&#xff0c;编程都有助于你的职业发展。学习编程将给你自己赋能。我喜欢尝试新想法&#xff0c;时刻都有希望启动的新项目。学会编程后&#xff0c;我就可以坐下来自己实现&#xff0c;而不需要依赖他人。 编程也会提升你在其他方面的技能。因为你熟练掌握…

对SpringBoot配置文件配置项加密原理

参考认识BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor - 知乎 SpringBoot 之 Jasypt 实现yml配置文件加密_-djasypt.encryptor.password-CSDN博客 【springboot】jasypt加密_jasypt.encryptor.password-CSDN博客 实现&#xff1a; 导包&#xff1a; 使…

Gitlab不允许使用ssh拉取代码的解决方案

一、起因 之前一直是用ssh进行代码拉取&#xff0c;后来公司搞网安行动&#xff0c;不允许ssh进行连接拉取代码了 因为我是用shell写了个小型的CI/CD,部署前端项目用于后端联调的&#xff0c;因此在自动部署时&#xff0c;不方便人机交互&#xff0c;所以需要自动填充账密。 …

ZLMediaKit cmake 编译 要点

# 加载自定义模块 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") project(ZLMediaKit LANGUAGES C CXX) # 使能 C11 set(CMAKE_CXX_STANDARD 11) ############################### SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_PROCESS…

护网2024-攻防对抗解决方案思路

一、护网行动简介 近年来&#xff0c;网络安全已被国家上升为国家安全的战略层面&#xff0c;网络安全同样也被视为维护企业业务持续性的关键。国家在网络安全治理方面不断出台法规与制度&#xff0c;并实施了一些大型项目和计划&#xff0c;如网络安全法、等级保护、网络安全…

【UE C++】 虚幻引擎C++开发需要掌握的C++和U++的基础知识有哪些?

目录 0 引言1 关键的 C 知识2 Unreal Engine 相关知识3 学习建议 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE C】 虚幻引擎C开发需要掌握的C和U的基础知识有哪些&#xff1f;❣️ 寄语&…

【MySQL精通之路】安全(1)-安全指南

任何在连接到Internet的计算机上使用MySQL的人都应该阅读本节&#xff0c;以避免最常见的安全错误。 在讨论安全性时&#xff0c;有必要考虑充分保护整个服务器主机&#xff08;而不仅仅是MySQL服务器&#xff09;免受所有类型的适用攻击&#xff1a;窃听、更改、播放和拒绝服…

kafkastream

kafkastream的介绍&#xff1a; Kafka Streams是一个开源的流处理库&#xff0c;用于构建实时数据流应用程序和微服务。它是Apache Kafka项目的一部分&#xff0c;是一种基于事件驱动的流处理解决方案。 Kafka Streams提供了高级别的API&#xff0c;使开发人员能够以简单和声…

什么情况下JVM内存中的一个对象会被垃圾回收?

什么情况下JVM内存中的一个对象会被垃圾回收? 1、什么时候会触发垃圾回收?2、被哪些变量引用的对象是不能回收的?3、Java中对象不同的引用类型4、finalize()方法的作用1、什么时候会触发垃圾回收? 平时我们系统运行创建的对象都是优先分配在新生代里的,如图: 然后如果…

【Oracle】PL SQL 怎么重新编译无效的对象

1.打开PL SQL &#xff0c;点击图中有红色的 2.点击齿轮按钮即可 from&#xff1a;【Oracle】PL SQL 怎么重新编译无效的对象_plsql编译无效对象的按钮在哪里-CSDN博客

redis查看一个key占用了多少内存

Redis 本身并没有直接提供一个命令来查看一个特定的 key 占用了多少内存。但是&#xff0c;你可以通过一些间接的方法来估算这个值。 以下是一些建议的方法&#xff1a; 使用 DEBUG OBJECT 命令&#xff1a; 虽然这不是一个官方推荐或稳定的命令&#xff0c;但在某些 Redis …