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

news2025/5/17 5:58:52

近期参与一个项目的开发,发现项目中的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 提供了简洁易用的接口,尤其适合快速开发和日常应用。


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

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

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

相关文章

使用Mathematica制作Lorenz吸引子的轨道追踪视频

Lorenz奇异吸引子是混沌理论中最早被发现和研究的吸引子之一,它由Edward Lorenz在1963年研究确定性非周期流时提出。Lorenz吸引子以其独特的"蝴蝶"形状而闻名,是混沌系统和非线性动力学的经典例子。 L NDSolveValue[{x[t] -3 (x[t] - y[t]),…

简单图像自适应亮度对比度调整

一、背景介绍 继续在刷对比度调整相关算法,偶然间发现了这个简单的亮度/对比度自适应调整算法,做个简单笔记记录。也许后面用得到。 二、自适应亮度调整 1、基本原理 方法来自论文:Adaptive Local Tone Mapping Based on Retinex for High Dynamic Ran…

深入理解二叉树:遍历、存储与算法实现

在之前的博客系列中,我们系统地探讨了多种线性表数据结构,包括顺序表、栈和队列等经典结构,并通过代码实现了它们的核心功能。从今天开始,我们将开启一个全新的数据结构篇章——树结构。与之前讨论的线性结构不同,树形…

【Win32 API】 lstrcmpA()

作用 比较两个字符字符串(比较区分大小写)。 lstrcmp 函数通过从第一个字符开始检查,若相等,则检查下一个,直到找到不相等或到达字符串的末尾。 函数 int lstrcmpA(LPCSTR lpString1, LPCSTR lpString2); 参数 lpStr…

(C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)

目录 前言: 源代码: product.h product.c fileio.h fileio.c main.c 代码解析: 一、程序结构概述 二、product.c 函数详解 1. 初始化商品列表 Init_products 2. 添加商品 add_product 3. 显示商品 display_products 4. 修改商品 mo…

NAT转换和ICMP

NAT nat原理示意 nat实现 ICMP ICMP支持主机或路由器: 差错或异常报告网络探寻 2类icmp报文: 差错报告报文(5种) 目的不可达源抑制--拥塞控制超时&超期--TTL超时参数问题--问题报文丢弃重定向--不应该由这个路由器转发&a…

【专利信息服务平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

BUUCTF——web刷题第一页题解

共31题,admin那题没有,因为环境问题,我做的非常卡 目录 极客大挑战 2019]Havefun [HCTF 2018]WarmU [ACTF2020 新生赛]Include [ACTF2020 新生赛]Exec [GXYCTF2019]Ping Ping Ping [SUCTF 2019]EasySQL [极客大挑战 2019]LoveSQL [极…

哪个品牌的智能对讲机好用?推荐1款,能扛事更智能

在专业通信领域,智能对讲机早已突破传统设备的局限,成为集通信、调度、数据传输于一体的智能化终端。面对复杂多变的作业环境,用户对设备的稳定性、通信效率和智能化水平提出了更高要求。但是,市面上产品同质化严重,部…

【Win32 API】 lstrcpyA()

作用 将字符串复制到指定的字符串缓冲区。 函数 LPSTR lstrcpyA(LPSTR lpString1, LPCSTR lpString2); 参数 lpString1 类型:LPTSTR 一个缓冲区,用于接收由 lpString2 参数指向的字符串的内容。 缓冲区必须足够大才能包含字符串,包括终止…

Vue3——Watch侦听器

目录 手动指定监听对象 侦听ref对象 侦听ref对象中的某个属性 reactive写法 watchEffect 自动侦听 多源侦听 一次性侦听器 watch 是⼀个⽤于观察和响应Vue响应式系统中数据变化的⽅法。它允许你指定⼀个数据源(可以是 响应式引⽤、计算属性、组件的属性等&#xf…

Go的单测gomock及覆盖率命令

安装gomock: go get github.com/golang/mock/gomockgo get github.com/golang/mock/mockgen 使用 mockgen 生成 mock 代码: 参考 mockgen -sourceservice/user.go -destinationservice/mocks/mock_user_service.go -packagemocks go test -coverprofilecoverage.out…

Leetcode209做题笔记

力扣209 题目分析:想象一个窗口遍历着这个数组,不断扩大右边界,让r。往窗口中添加数字: 此时我们找到了这个窗口,它的和满足了大于等于target的条件,题目让我求最短的,那么我们就尝试来缩短它&…

Suna: 开源多面手 AI 代理

GitHub:GitHub - kortix-ai/suna: Suna - Open Source Generalist AI Agent 更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI Suna 是一个完全开源的 AI 助手,可帮助您轻松完成实际任务。通过自然对话&#xff0c…

25-05-16计算机网络学习笔记Day1

深入剖析计算机网络:今日学习笔记总结 本系列博客源自作者在大二期末复习计算机网络时所记录笔记,看的视频资料是B站湖科大教书匠的计算机网络微课堂,每篇博客结尾附书写笔记(字丑见谅哈哈) 视频链接地址 一、计算机网络基础概念 &#xf…

12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建

文章目录 一、如何实现一条用例,实现覆盖所有用例的测试1、结合数据驱动:编辑一条用例,外部导入数据实现循环测试2、用例体:实现不同用例的操作步骤对应的断言 二、实战1、项目路径总览2、common 文件夹下的代码文件3、keywords 文…

动态IP赋能业务增效:技术解构与实战应用指南

在数字化转型加速的今天,IP地址作为网络通信的基础设施,其技术特性正深刻影响着企业业务架构的效率与安全性。动态IP(Dynamic IP)作为互联网资源分配的核心机制,早已突破传统认知中的"临时地址"定位&#xf…

【Java ee初阶】http(1)

HTTP 全称为“超文本传输协议”,由名字可知,这是一个基于文本格式的协议,而TCP,UDP,以太网,IP...都是基于二进制格式的协议。 如何区别该协议是基于哪种格式的协议? 形如这种协议格式&#xf…

day18-数据结构引言

一、 概述 数据结构:相互之间存在一种或多种特定关系的数据元素的集合。 1.1 特定关系: 1. 逻辑结构 2.物理结构(在内存当中的存储关系) 逻辑结构物理结构集合,所有数据在同一个集合中,关系平等顺…

我开源了一个免费在线工具!UIED Tools

UIED Tools - 免费在线工具集合 最近更新:修改了文档说明,优化了项目结构介绍 这是设计师转开发的第一个开源项目,bug和代码规范可能有些欠缺。 这是一个功能丰富的免费在线工具集合网站,集成了多种实用工具,包括 AI …