当前位置: 首页 > news >正文

原生的 XMLHttpRequest 和基于 jQuery 的 $.ajax 方法的异同之处以及使用场景

近期参与一个项目的开发,发现项目中的ajax请求有两种不同的写法,查询了下两种写法的异同之处以及使用场景。
下面将从以下两段简单代码进行异同之处的分析及使用场景的介绍:

// 写法一:
var xhr = new XMLHttpRequest();
xhr.open("", "", );
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {if (xhr.readyState == 4 && xhr.status == 200) {var result = JSON.parse(xhr.responseText);}
};
xhr.send(JSON.stringify({ }));// 写法二:
$.ajax({url: "",type: "",data: { },success: function (res) {},error: function (xhr, status, error) {}
});

以上两种写法的异同之处、以及使用场景详细介绍:
这两种写法都是用来向服务器发送 HTTP 请求并处理响应的方式,尽管它们的目标相同,但实现方式有所不同。以下是对这两种写法的详细分析:


一、相同之处:

1、功能相同:

都是用来向服务器发送请求并接收响应。
都支持异步请求,确保网页不会因为请求而阻塞用户的操作。
都用于发送 HTTP 请求,通常是发送 POST 或 GET 请求。

2、请求类型:

写法1 和 写法2 都支持发送不同类型的 HTTP 请求(GET、POST 等),只不过写法2提供了更简洁的接口。

3、响应处理:

两者都可以处理请求完成后的响应,执行一些操作,如更新页面内容。

4、数据格式:

通过两种方式发送的数据格式都可以是 JSON 或表单格式,具体取决于请求的设置。


二、不同之处:

1. 请求方式:
写法1(原生 XMLHttpRequest):

需要手动创建 XMLHttpRequest 对象并设置请求头。
需要手动处理请求的发送和响应的处理。比如,你需要自己编写代码来监听请求的状态变化(通过 onreadystatechange 事件)。
对于每次请求,都需要手动设置请求头、请求方法、参数等,比较繁琐。

写法2(使用 jQuery 的 $.ajax):

通过 . a j a x 方法简化了请求的发送, .ajax 方法简化了请求的发送, .ajax方法简化了请求的发送,.ajax 封装了很多底层操作(如设置请求头、发送数据、接收响应等),使得代码更加简洁。
只需要传递一个配置对象,jQuery 会自动处理大部分事情(如设置请求方法、请求头、错误处理、回调等)。
success 和 error 回调函数处理响应,代码结构更加清晰。

2. 请求数据的处理:
写法1:

需要手动处理请求数据的序列化(例如将数据转为 JSON 格式)。
数据传递时需要使用 xhr.send() 来发送请求,且通常需要手动处理数据格式(如 JSON 格式或表单格式)。

写法2:

$.ajax 自动处理数据序列化。如果传递对象,jQuery 会自动将其转化为适当的格式。
data 可以直接传递 JavaScript 对象,jQuery 会自动处理为合适的格式(如 URL 编码的表单数据或 JSON 格式的数据)。

3. 回调函数:
写法1:

使用 xhr.onreadystatechange 监听请求的状态变化。
需要手动判断 xhr.readyState 和 xhr.status 来确认请求是否成功。

写法2:

$.ajax 提供了 success 和 error 等回调函数,简化了回调处理。
success 用于处理成功响应,error 用于处理错误,结构清晰易于理解。

4. 错误处理:
写法1:

错误处理比较复杂,需要手动判断 xhr.status 来确定请求是否失败。

写法2:

通过 error 回调函数来处理错误,jQuery 会将错误信息(如 HTTP 状态码)作为参数传递,错误处理更为简单。

5. 跨浏览器兼容性:
写法1:

XMLHttpRequest 是原生 JavaScript API,虽然广泛支持现代浏览器,但在某些老旧浏览器中可能需要额外的兼容性处理。

写法2:

$.ajax 通过 jQuery 对多浏览器进行了封装,确保在不同浏览器间有更好的兼容性,尤其是对于老旧浏览器的支持。

6. 可读性和简洁性:
写法1:

代码较为繁琐,涉及较多的手动设置和判断。

写法2:

代码简洁,易于阅读和维护,特别适合快速开发和小型项目。


三、使用场景:

1. 写法1(原生 XMLHttpRequest):
适用于以下场景:
无需依赖外部库:

如果不希望引入 jQuery 或任何外部库,可以选择使用原生的 XMLHttpRequest。

需要精细控制请求的各个部分:

如果需要更细粒度的控制(例如手动设置特殊的请求头、控制请求的超时时间等),原生 XMLHttpRequest 提供了更多灵活性。

兼容性要求:

如果项目中需要兼容一些非常老旧的浏览器,XMLHttpRequest 可以提供更好的控制,避免对 jQuery 的依赖。

2. 写法2(jQuery $.ajax):
适用于以下场景:
快速开发:

如果你正在开发一个快速原型,或者项目中已经引入了 jQuery,$.ajax 可以大大简化代码。

简洁的代码和维护性:

对于常见的请求,使用 . a j a x 使得代码更加简洁易读,避免重复的代码块。复杂的请求处理:例如,处理 P O S T 请求、上传文件等, .ajax 使得代码更加简洁易读,避免重复的代码块。 复杂的请求处理:例如,处理 POST 请求、上传文件等, .ajax使得代码更加简洁易读,避免重复的代码块。复杂的请求处理:例如,处理POST请求、上传文件等,.ajax 提供了更高层次的抽象和易用的 API。

广泛的跨浏览器兼容性:

如果你需要在不同浏览器间处理复杂的请求,$.ajax 的封装可以避免浏览器之间的差异。

总结:

写法1(原生 XMLHttpRequest)

适合那些不想依赖外部库、需要更精细控制请求过程的开发者。

写法2(jQuery $.ajax)

适合已经使用 jQuery 的项目,尤其是当你希望简化代码、提高开发效率时。$.ajax 提供了简洁易用的接口,尤其适合快速开发和日常应用。


欢迎大家留言纠正及补充,愿与大家共勉~~~~

相关文章:

原生的 XMLHttpRequest 和基于 jQuery 的 $.ajax 方法的异同之处以及使用场景

近期参与一个项目的开发,发现项目中的ajax请求有两种不同的写法,查询了下两种写法的异同之处以及使用场景。 下面将从以下两段简单代码进行异同之处的分析及使用场景的介绍: // 写法一: var xhr new XMLHttpRequest(); xhr.open…...

横向移动(上)

横向移动(上) 横向移动指的是攻击者在内网中获得初始访问权限之后,通过相关技术扩大敏感数据和高价值资产权限的行为 常见的横向移动的方式 1.通过web漏洞 2.通过远程桌面 3.通过账号密码 4.通过不安全的配置 5.通过系统漏洞 利用远控…...

关于 js:7. 模块化、构建与工具链

一、模块系统:CommonJS、ESM、UMD 模块系统的目标: 将代码拆分为独立的逻辑单元(模块),实现封装、复用、依赖管理。 在 Web 前端/Node 中,因为 JavaScript 起初没有模块机制,因此出现了多个模…...

一次IPA被破解后的教训(附Ipa Guard等混淆工具实测)

一行代码的疏忽,一个默认的类名,一个未混淆的资源路径,都可能成为攻击者入侵的入口。 背景:一次“不值一提”的上线,成了代价惨重的经验 故事的起点很简单:我们给销售部门做了一款小型内部演示 App&#x…...

麒麟系统安装.net core环境变量

本文主要记录在麒麟系统上安装.net core的运行环境,这里使用的是麒麟V10桌面版,后续测试服务器到了之后再使用服务器版进行安装测试。 环境安装 下载 这里由于是桌面版,我直接使用浏览器下的包,下完之后在终端中安装。 安装 1…...

如何使用 React Hooks 替代类组件的生命周期方法?

文章目录 1. 引言2. useEffect 概述3. 模拟类组件的生命周期方法3.1 模拟 componentDidMount3.2 模拟 componentDidUpdate3.3 模拟 componentWillUnmount 4. 多个 useEffect 的使用5. 注意事项6. 总结 1. 引言 在 React 16.8 版本之前,开发者主要通过类组件&#x…...

windows 在安装 Ubuntu-20.04 显示操作超时解决办法

1. 问题概述与原因分析 在我们用下面命令安装 Ubuntu-20.04 时系统显示操作超时: wsl --install -d Ubuntu-20.04大概率是没打开 Windows 虚拟机监控程序平台,可以在控制面板–>程序和功能里面打开 2. 解决办法与步骤 解决方式如下: 我…...

Spring Boot中Redis序列化配置详解

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在使用Spring Boot集成Redis时,序列化方式的选择直接影响数据存储的效率和系统兼容性。默认的JDK序列化存在可读性差、存储空间大等问题&am…...

OpenCV进阶操作:光流估计

文章目录 前言一、光流估计1、光流估计是什么?2、光流估计的前提?1)亮度恒定2)小运动3)空间一致 3、OpenCV中的经典光流算法1)Lucas-Kanade方法(稀疏光流)2) Farneback方…...

2025年渗透测试面试题总结-渗透测试红队面试八(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 渗透测试红队面试八 二百一十一、常见中间件解析漏洞利用方式 二百一十二、MySQL用户密码存储与加密 …...

前端面试高频50个问题,解答

以下是前端面试中常见的50个高频问题及其简要解答&#xff1a; HTML HTML5 有哪些新特性&#xff1f; 语义化标签&#xff08;如 <header>、<footer>&#xff09;、多媒体支持&#xff08;如 <audio>、<video>&#xff09;、本地存储&#xff08;如 l…...

Elasticsearch架构原理

1、Elasticsearch的节点类型 1.1 Master节点 在Elasticsearch启动时&#xff0c;会选举出来一个Master节点。当某个节点启动后&#xff0c;然后 使用Zen Discovery机制找到集群中的其他节点&#xff0c;并建立连接。 discovery.seed_hosts: ["192.168.21.130", &qu…...

前端面试宝典---webpack面试题

webpack 的 tree shaking 的原理 Webpack 的 Tree Shaking 过程主要包含以下步骤&#xff1a; 模块依赖分析&#xff1a;Webpack 首先构建一个完整的模块依赖图&#xff0c;确定每个模块之间的依赖关系。导出值分析&#xff1a;通过分析模块之间的 import 和 export&#xff…...

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践 一、Tailwind CSS 配置 1. 安装依赖 npm install tailwindcssnpm:tailwindcss/postcss7-compat tailwindcss/postcss7-compat postcss^7 autoprefixer^92. 创建配置文件 npx tailwindcss init3. 创建样式文件 在…...

hiveserver2与beeline进行远程连接hive配置及遇到的问题

1、hiveserver2 参与用户模拟功能&#xff0c;因为开启后才能保证各用户之间的权限隔离。 1.1、配置 $HADOOP_HOME/etc/hadoop/core-site.xml <!--配置所有节点的root用户都可作为代理用户--> <property><name>hadoop.proxyuser.root.hosts</name>&…...

单词短语0512

当然可以&#xff0c;下面是“opportunity”在考研英语中的常用意思和高频短语&#xff0c;采用大字体展示&#xff0c;便于记忆&#xff1a; ✅ opportunity 的考研常用意思&#xff1a; &#x1f449; 机会&#xff0c;良机 表示有利的时机或条件&#xff0c;尤指成功的可能…...

c++刷题便捷函数(类似于stoi的小函数)

标题 stoi(字符串转整形)map和set都有count成员函数&#xff0c;返回值是该key的个数&#xff0c;可以用来查是否存在该元素。bool is_sorted(nums.begin(), nums.end() 检验是否有序INT_MAX,INT_MIN分别是整形最大和最小初始化二维矩阵 vector<vector\<int>> mart…...

想实现一个基于MCP的pptx生成系统架构图【初版实现】

技术栈:Python + MCP协议 + python-pptx + FastMCP 核心创新点:通过MCP协议实现PPTX元素的动态化生成与标准化模板管理 当前还是个半成品,后续持续更新。 主要先介绍一下思路。 一、MCP协议与系统设计原理 1.1 为什么选择MCP? 标准化工具调用:通过MCP将PPTX元素生成逻辑封…...

jwt学习

基于token的鉴权机制也是无状态的(类似于http协议)&#xff0c;不需要保在服务端保留用户的认证或会话信息。 构成 jwt由三部分构成&#xff1a;头部、payload、签名&#xff0c;中间用.隔开 头部(header) 包含两部分信息&#xff1a;声明类型、声明加密的算法 例如&#xff1a…...

pth的模型格式怎么变成SafeTensors了?

文章目录 背景传统模型格式的安全隐患效率与资源瓶颈跨框架兼容性限制Hugging Face 的解决方案&#xff1a;SafeTensors行业与社区的推动SafeTensors 的意义总结 背景 最近要找一些适合embedding的模型&#xff0c;在huggingface模型库上看到一些排名比较靠前的&#xff0c;准…...

如何判断IP是否被平台标记

一、基础检测&#xff1a;连通性与黑名单筛查 网络连通性测试 Ping与Traceroute&#xff1a;通过命令测试延迟和路由路径&#xff0c;若延迟>50ms或存在异常节点&#xff08;如某跳延迟>200ms&#xff09;&#xff0c;可能影响可用性。示例命令&#xff1a; bash ping 8.…...

【c++】异常详解

目录 C语言处理错误的局限性异常的定义异常的具体使用细则异常的抛出与捕获在函数调用链中异常栈展开匹配原则异常的重新抛出异常规范throw(类型)noexcept 成熟的异常体系c自己的异常体系异常的优缺点优点缺点 异常安全 C语言处理错误的局限性 C语言处理错误常常会用到assert和…...

从模型加密到授权交付,CodeMeter赋能3D打印商业化全流程

引言 在数字化制造快速演进的当下&#xff0c;3D 打印&#xff08;增材制造&#xff09;作为具备高度灵活性与创新潜力的制造方式&#xff0c;正重塑备件供应链与产品生命周期管理。然而&#xff0c;随着应用场景不断扩展&#xff0c;企业面临的知识产权保护、数字资产商业化与…...

ESP32开发之freeRTOS的事件组

什么是事件组事件组的应用场景事件组的API函数事件组应用举例总结什么是事件组 概念:事件组就是一个整数,高8位给内核使用,其他位用来表示事件。在ESP32的IDF freeRTOS中,这个整数是32位的,低24位用来供事件组使用。 举一个生活中的例子: 你在等快递,有三个包裹来自不…...

K8S中构建双架构镜像-从零到成功

背景介绍 公司一个客户的项目使用的全信创的环境&#xff0c;服务器采用arm64的机器&#xff0c;而我们的应用全部是amd64的&#xff0c;于是需要对现在公司流水线进行arm64版本的同步镜像生成。本文介绍从最开始到最终生成双架构的全部过程&#xff0c;以及其中使用的相关配置…...

腾讯怎样基于DeepSeek搭建企业应用?怎样私有化部署满血版DS?直播:腾讯云X DeepSeek!

2025新春&#xff0c;DeepSeek横空出世&#xff0c;震撼全球&#xff01; 通过算法优化&#xff0c;DeepSeek将训练与推理成本降低至国际同类模型的1/10&#xff0c;极大的降低了AI应用开发的门槛。 可以预见&#xff0c;2025年&#xff0c;是AI应用落地爆发之年&#xff01; ✔…...

【论信息系统项目的质量管理】

论信息系统项目的质量管理 前言一、抓好质量管理规划工作&#xff0c;为质量管理和确认提供指南和方向。二、做好管理质量相关工作&#xff0c;促进质量过程改进。三、抓好控制质量&#xff0c;确保实现质量目标四、综合协调质量与成本、进度、范围的关系总结 前言 为解决日常出…...

SpringAI框架中的RAG模块详解及应用示例

SpringAI框架中的RAG模块详解及应用示例 RAG&#xff08;Retrieval-Augmented Generation&#xff09;可以通过检索知识库&#xff0c;克服大模型训练完成后参数冻结的局限性&#xff0c;携带知识让大模型根据知识进行回答。SpringAI框架提供了模块化的API来支持RAG&#xff0…...

图像增强技术

一、目的 通过本实验加深对数字图像增强操作的理解&#xff0c;熟悉MATLAB中的有关函数&#xff1b;了解直方图均衡化和卷积滤波的原理&#xff1b;熟悉低通和高通滤波模板的构造方法。 二、实验内容与设计思想 1、观察实验结果可看出&#xff0c; 原图像 I的对比度较低&…...

【Java学习笔记】多态参数

多态参数 应用&#xff1a;方法定义的形参类型为父类类型&#xff0c;实参允许为子类类型 // 父类 package polyparemeter;public class employee {private String name;private double salary;//构造器public employee(){}public employee(String name, double salary) {thi…...

计算机网络核心技术解析:从基础架构到应用实践

计算机网络作为现代信息社会的基石&#xff0c;承载着全球数据交换与资源共享的核心功能。本文将从网络基础架构、核心协议、分层模型到实际应用场景&#xff0c;全面解析计算机网络的核心技术&#xff0c;并结合行业最新趋势&#xff0c;为读者构建系统的知识体系。 一、计算机…...

LiveData:Android响应式编程的核心利器

LiveData是一种可观察的数据持有类,用于在Android应用中实现数据的响应式编程。它具有以下特点和作用: 特点 生命周期感知:LiveData能够感知与其关联的组件(如Activity、Fragment)的生命周期状态。只有当组件处于活跃状态(如Activity处于RESUMED状态)时,LiveData才会将…...

【LeeCode】1.两数之和

文章目录 1. 暴力求解2. 哈希表具体过程1. nums [2, 7, 11, 15]&#xff0c;target 9&#xff1a;2. nums [11, 15, 2, 7]&#xff0c; target 9 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff…...

继承关系下创建对象的具体流程

public class Person {int x initX(); // 显式初始化&#xff1a;调用方法 initX()public Person() {System.out.println("Parent 构造器执行, x " x);}int initX() {System.out.println("initX() 被调用了");return 100;} }public class Child extends…...

基于世界土壤数据库(HWSD)的中国土壤数据集(v1.1)(2009)

时间分辨率&#xff1a;年共享方式&#xff1a;开放获取数据大小&#xff1a;156.47 MB数据时间范围&#xff1a;2009元数据更新时间&#xff1a;2020-03-26 数据集摘要 数据来源于联合国粮农组织&#xff08;FAO&#xff09;和维也纳国际应用系统研究所(IIASA)所构建的世界土…...

mac M2能安装的虚拟机和linux系统系统

目前网上的资料大多错误&#xff0c;能支持M2的很少。 推荐安装的改造过的centos7也无法进行yum操作&#xff0c;建议安装centos8 VMware Fusion下载地址&#xff1a; https://pan.baidu.com/s/14v3Dy83nuLr2xOy_qf0Jvw 提取码: jri4 centos8下载地址&#xff1a; https://…...

212. 单词搜索 II【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 212. 单词搜索 II 一、题目描述 给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母…...

【软考-高级】【信息系统项目管理师】论文写作注意事项及2014年至2024年历年论文题目汇总

论文写作注意事项 要求 字数要求&#xff1a;2500字以内&#xff08;2024年超过2500字&#xff0c;在线答题系统无法输入&#xff09;时长要求&#xff1a;2小时&#xff08;大多数人不够用&#xff09;内容要求&#xff1a; 必须响应子标题&#xff0c;如子标题要求写如何优…...

MySQL数据库表的约束

目录 1.null属性 2.默认值约束&#xff08;default&#xff09; 3.comment 4.zerofill 5.主键&#xff08;primary key&#xff09; 6.自增长&#xff08;auto_increment&#xff09; 7.唯一键&#xff08;unique&#xff09; ​编辑 8.外键 约束是为了安全插入数据&a…...

硅基计划2.0 学习总结 壹 Java初阶

一、初见Java &#xff08;1&#xff09;Java简介 首先不得不承认Java是一门优秀的程序设计语言 其系列的计算机软件和跨平台体系包括国内的生态链完善是C/C语言难以弥补的 &#xff08;2&#xff09;Java SE 全称Java Standard Edition&#xff0c;是Java体系的基础 &am…...

逆向破解:x64dbg

文章目录 一、CPU窗口1、反汇编窗口2、寄存器窗口3、栈地址窗口4、十六进制数据窗口5、堆栈参数解析窗口 二、常用快捷键三、字符串检索功能四、调试功能1、上一步 一、CPU窗口 1、反汇编窗口 2、寄存器窗口 寄存器窗口用于显示和解释当前线程环境下CPU寄存器的各种状态值和内…...

从MCU到SoC的开发思维转变

目录 1、硬件设计 2、软件开发 3、调试与测试 4、电源管理 微控制器单元&#xff08;MCU&#xff09;和系统级芯片&#xff08;SoC&#xff09;是嵌入式开发中最常见的两种处理器类型。MCU以其简单、低功耗的特点&#xff0c;广泛应用于特定控制任务&#xff1b;而SoC凭借强…...

3DGS-to-PC:3DGS模型一键丝滑转 点云 or Mesh 【Ubuntu 20.04】【2025最新版!!】

一、引言 3D高斯泼溅(3DGS)是一种新兴的三维场景表示方法&#xff0c;可以生成高质量的场景重建结果。然而&#xff0c;要查看这些重建场景&#xff0c;需要特殊的高斯渲染器。大多数3D处理软件并不兼容3D高斯分布模型&#xff0c;但它们通常都兼容点云文件。 3DGS-to-PC项目提…...

互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-3

互联网大厂Java求职面试&#xff1a;优惠券服务架构设计与AI增强实践-3 场景背景 面试场景设定在一家大型互联网公司&#xff0c;面试官为拥有10年以上经验的技术总监&#xff0c;专注于高并发、高可用系统的架构设计。候选人郑薪苦是一名技术潜力十足的程序员&#xff0c;擅…...

ABP-Book Store Application中文讲解 - 前期准备 - Part 3:Acme.BookStore项目模块详解

ABP-Book Store Application中文讲解-汇总-CSDN博客 本文通过对Acme.BookStore项目各模块的详解&#xff0c;让大家知道每个project用来干什么的&#xff0c;他们之间的引用关系是什么&#xff0c;同时知道怎样添加新的功能模块。 Acme.Bookstore 是主要 ABP Studio 模块的主…...

智慧城市综合运营管理系统Axure原型

这款Axure原型的设计理念紧紧围绕城市管理者的需求展开。它旨在打破传统城市管理中信息孤岛的局面&#xff0c;通过统一标准接入各类业务系统&#xff0c;实现城市运营管理信息资源的全面整合与共享。以城市管理者为中心&#xff0c;为其提供一个直观、便捷、高效的协同服务平台…...

Java中进阶并发编程

第一章、并发编程的挑战 并发和并行&#xff1a;指多线程或多进程 线程的本质&#xff1a;操作系统能够进行运算调度的最小单位&#xff0c;是进程&#xff08;Process&#xff09;中的实际工作单元 进程的本质&#xff1a;操作系统进行资源分配和调度的基本单位&#xff0c…...

cursor 出现问题 为客户解决问题

文档出自&#xff1a;https://www.kdocs.cn/l/cp5GpLHAWc0p...

【氮化镓】GaN在不同电子能量损失的SHI辐射下的损伤

该文的主要发现和结论如下: GaN的再结晶特性 :GaN在离子撞击区域具有较高的再结晶倾向,这导致其形成永久损伤的阈值较高。在所有研究的电子能量损失 regime 下,GaN都表现出这种倾向,但在电子能量损失增加时,其效率会降低,尤其是在材料发生解离并形成N₂气泡时。 能量损失…...

用drawdb.app可视化创建mysql关系表

平时自己建表,没有可视化图形参考 为了便于理解,用drwadb画mysql关系表 drawDB | Online database diagram editor and SQL generator...