前端请求XMLHttpRequest详解

文章导读:AI 辅助学习前端,包含入门、进阶、高级部分前端系列内容,当前是 javascript 的部分,瑶琴会持续更新,适合零基础的朋友,已有前端工作经验的可以不看,也可以当作基础知识回顾。

这篇文章瑶琴带大家学习浏览器中非常重要的一个api:XMLHttpRequest

1.XMLHttpRequest

XMLHttpRequest 是一个浏览器API,用于在客户端和服务器之间传输数据。它是AJAX(Asynchronous JavaScript and XML,异步JavaScript和XML)的基础,允许网页在不重新加载的情况下与服务器交换数据,从而可以实现创建快速动态的网页。

使用场景:

1.数据加载:在不刷新页面的情况下,从服务器获取数据并更新页面的某些部分。

2.表单提交:异步提交表单数据,无需刷新页面。

3.文件上传:上传文件到服务器。

4.跨域请求:通过设置HTTP头部,可以进行跨域通信。

示例:

// 创建一个新的 XMLHttpRequest 对象 
var xhr = new XMLHttpRequest(); // 配置请求类型、URL 以及是否异步处理 
xhr.open('GET', 'https://api.example.com/data', true); // 设置请求成功后的回调函数 
xhr.onload = function() { 
if (xhr.status >= 200 && xhr.status < 300) { 
// 解析返回的 JSON 数据 var data = JSON.parse(xhr.responseText); console.log(data); } else { // 处理错误情况 console.error('Request failed'); } 
}; // 发送请求 
xhr.send();

再来了解下fetch,fetch 是 XMLHttpRequest 的现代替代品,它是一个更简洁、功能更强大的API。fetch 返回一个 Promise,使得异步数据获取和错误处理更加方便。

3.fetch

函数可以在不同条件下返回不同的值,但只有第一个执行的 return 语句会生效。一旦遇到 return,函数就会结束执行。

使用场景:

1.数据获取:与 XMLHttpRequest 类似,用于获取数据。

2.流式处理:可以处理服务器发送的响应流。

3.自定义请求头:允许设置自定义请求头。

4.响应处理:可以方便地处理不同类型的响应(如JSON、blob、text等)。

示例:

// 使用 fetch 获取数据
fetch('https://api.example.com/data')  .then(response => {       // 检查响应状态是否成功        
if (!response.ok) {              throw new Error('Network response was not ok');       }        
// 解析JSON响应体       return response.json();  
}).then(data => {        // 使用数据        console.log(data);  
}).catch(error => {        // 处理错误        console.error('There has been a problem with your fetch operation:', error);  
});。

你可以将 XMLHttpRequest 想象成一辆老旧的汽车,它能够完成从一个地方到另一个地方(客户端到服务器)的旅行,但是操作起来比较复杂,需要手动控制每一个步骤。

而 fetch 则像是一辆现代化的自动驾驶汽车,它也能完成同样的旅行,但是更加智能和简便,你只需要告诉它目的地(URL),它就会自动规划路线,处理行驶中的各种情况,并且能够以多种方式(比如直接在车上看电影、听音乐)享受旅途。

随着前端技术的发展,fetch 逐渐成为主流,并且也出现很多请求库,比如axios。

但是在一些老旧的项目或者需要支持较老浏览器的情况下,XMLHttpRequest 仍然有其使用场景。对于前端初学者来说,理解这两个API的基本概念和使用方法是非常重要的。

下面再简单介绍下axios,它是现代前端开发中必不可少的网络请求库。中文文档:http://www.axios-js.com/

4. axios

axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js 环境。它被设计为能够处理所有HTTP请求,无论是简单的GET请求还是复杂的请求,如上传文件或处理JSON响应。axios 的目标是提供一种简单、统一且可扩展的API。

主要特点:

1.基于 Promise:axios 的所有请求返回Promises,这使得你可以使用.then()和.catch()来处理成功的响应或捕获错误。

2.跨平台:可以在浏览器端和Node.js环境中使用。

3.简单易用:提供了简洁的API,使得发送HTTP请求变得简单。

4.请求和响应拦截器:允许你拦截请求或响应,以便在它们到达then或catch之前进行处理。

5.转换请求和响应数据:允许你转换发送到服务器之前的数据,以及从服务器接收到的数据。

6.取消请求:支持取消请求,可以用于防止悬挂请求。

7.JSON:自动转换JSON数据。

8.CORS:支持跨源资源共享(CORS)。

对于初学者来说,需要先从原生的XMLHttp请求开始,这是前端AJAX的基础。对于后期使用到的诸如axios的库才更容易理解。

希望今天的内容对初学前端的朋友有所帮助。也希望每一个初学者都能成为一个优秀的前端开发工程师,加油。

最后啰嗦一句,好记性不如烂笔头,希望大家在学习的过程中养成做笔记的习惯,形成自己的知识体系。

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

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

相关文章

全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动顺利开展

6月21日&#xff0c;省教育评估院在四川邮电职业技术学院组织开展全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动。省教育评估院副院长赖长春&#xff0c;四川邮电职业技术学院党委副书记、校长冯远洪&#xff0c;四川邮电职业技术学院党委委员、副校长程德杰等出席…

业务场景问题二:部分业务场景问题(简)

在面试环节&#xff0c;通常面试官会问一些企业级开发项目中的场景问题&#xff0c;大致可分为以下几个部分&#xff0c;本章作为简易引导&#xff0c;不作详细的技术解答。 面试的业务场景问题 处理亿级数据库&#xff1a; 数据库分库分表&#xff1a;使用分片技术将数据按照…

Docker环境安装anythingllm

拉镜像 docker pull mintplexlabs/anythingllm建目录 export STORAGE_LOCATION$HOME/anythingllm && \ mkdir -p $STORAGE_LOCATION && \ touch "$STORAGE_LOCATION/.env"检查目录具有写权限 # 为目录anythingllm赋写权限 chmod 777 anythingllm 启…

探索Scala的尾递归优化:性能提升的秘诀

探索Scala的尾递归优化&#xff1a;性能提升的秘诀 引言 在函数式编程中&#xff0c;递归是一种常见的编程范式。然而&#xff0c;传统的递归可能会因为堆栈溢出而导致性能问题。Scala作为一门支持函数式编程的语言&#xff0c;提供了尾递归优化的特性&#xff0c;这使得递归…

PCL笔记二 之VS环境配置(不同版本Debug+Release编译)

PCL笔记二 之VS环境配置(不同版本Debug+Release编译) PCL官网:https://github.com/PointCloudLibrary/pcl/releases众所周知,PCL是一个用于点云处理并且依赖不少三方库的一个算法库,同时在编译配置环境时也很复杂,因此这里想整理一下不同版本对应的环境配置过程,版本如下…

力扣921. 使括号有效的最少添加

Problem: 921. 使括号有效的最少添加 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.定义int变量res、need分别记录需要插入的左括号数和所需与左括号配对的右括号数&#xff1b; 2.遍历字符串&#xff1a; 2.1.若当为左括号&#xff0c;则need&#xff0c;表示…

eslint版本9.0之后配置方法

在eslint9.0之后&#xff0c;迎来版本大更新。首先是抛弃了自带的规则&#xff08;没了我喜欢的git standard风格&#xff09;&#xff0c;其次是配置又更新了&#xff0c;改动有点大&#xff0c;重新捋了一遍之后&#xff0c;附上最新的eslint配置过程。 初始化命令 此次试验…

[word] 如何在word中插入地图? #学习方法#其他

如何在word中插入地图&#xff1f; 人事部门在给即将入职的新员工发送入职资料时&#xff0c;为了方便新员工能快速找到公司的具体位置&#xff0c;一般都会在word资料中插入公司所在位置的地图。今天&#xff0c;小编就分享一个在word中插入地图的方法。 第一步&#xff1a;…

企智汇软件:专业项目管理系统,一体化PaaS平台!快速落地项目!

在快速变化的市场环境中&#xff0c;项目管理不再是简单的任务分配和时间跟踪&#xff0c;它更是一门需要精准决策、高效沟通和智能协作的管理工具。然而&#xff0c;面对日益复杂的项目需求、跨部门的协作挑战以及海量的信息数据&#xff0c;传统的项目管理方式往往显得力不从…

HTML/CSS 基础

1、<input type"checkbox" checked> checked 默认选中为复选框 2、表格中的标题<caption> 3、文字标签直接加 title 4、<dl>为自定义列表的整体&#xff0c;包裹<dt><dd> <dt>自定义列表的主题 <dd>主题的每一项内容 5、…

数值分析笔记(三)函数逼近

最佳平方逼近 函数逼近是使用一种简单易算的函数来近似表示一个复杂函数。 该问题可转化为求解线性方程组 G n C F n ​ G_{n}CF_{n}​ Gn​CFn​​ 其中&#xff0c;系数 C ( c 0 , c 1 , ⋯ , c n ) T , F n ( ( f , φ 0 ) , ( f , φ 1 ) , ⋯ , ( f , φ n ) ) T C(c…

【Java】解决Java报错:IllegalMonitorStateException in Synchronization

文章目录 引言一、IllegalMonitorStateException的定义与概述1. 什么是IllegalMonitorStateException&#xff1f;2. IllegalMonitorStateException的常见触发场景3. 示例代码 二、解决方案1. 确保在同步代码块或方法中调用wait()、notify()和notifyAll()2. 使用同步方法3. 使用…

Linux系统学习——指令三

Linux系统学习——指令三 Linux系统学习——指令三chmod — 文件执行权限添加文件执行权限去除文件执行权限 查找文件中特定关键字使用vi编辑文件并查找特定关键字文本文件查找特定关键字1: 使用 grep 命令2: 使用 find 命令3: 使用 awk 命令4: 使用 sed 命令5: 使用 ag 命令&a…

非强化学习的对齐方法

在文章《LLM对齐“3H原则”》和《深入理解RLHF技术》中&#xff0c;我们介绍了大语言模型与人类对齐的“3H原则”&#xff0c;以及基于人类反馈的强化学习方法&#xff08;RLHF&#xff09;&#xff0c;本文将继续介绍另外一种非强化学习的对齐方法&#xff1a;直接偏好优化&am…

Vulnhub靶场DC-4练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 爆破登录2. 命令执行3. 反弹shell4. hydra爆破ssh5. 提权 0x04 总结 0x00 准备 下载链接&#xff1a;https://download.vulnhub.com/dc/DC-4.zip 介绍&#xff1a; DC-4 is another purposely built …

linux桌面运维----第五天

1、创建用户命令useradd&#xff1a; 作用&#xff1a;创建用户 ​语法&#xff1a;useradd [选项名] 用户名 ​选项&#xff1a; -d<登入目录> 指定用户登入时的起始目录。 【掌握】 -g<群组> 指定用户所属的群组&#xff08;基本组&#xff09;。【掌握】…

交通信号灯控制系统的设计(仿真,汇编语言实现)——微机课设

计算机科学与技术 专业课程设计任务书 学生姓名 专业班级 学号 题 目 交通信号灯控制系统的设计 课题性质 A.工程设计 课题来源 自拟课题 指导教师 同组姓名 主要内容 初始状态用K1键控制&#xff0c;为两个黄灯闪烁&#xff1b; K2键控制红、黄、绿灯接…

Diffusion Mamba:用于CT到MRI转换的Mamba扩散模型

Diffusion Mamba&#xff1a;用于CT到MRI转换的Mamba扩散模型 提出背景拆解左侧&#xff1a;整体框架中间&#xff1a;Mamba块的细节右侧&#xff1a;螺旋扫描的细节 提出背景 论文&#xff1a;https://arxiv.org/pdf/2406.15910 代码&#xff1a;https://github.com/wongzbb…

意图理解与态势感知

意图理解和态势感知是现代智能系统中两个关键的概念&#xff0c;尤其在复杂和动态的环境中。这两个概念在多个领域有广泛应用&#xff0c;如军事、自动驾驶、智能家居、工业自动化等。以下是对这两个概念的详细解释及其关联。 意图理解指的是系统能够准确识别和理解用户或环境中…

使用 python asyncio的一个例子,以及在jupyter lab中使用时的一个常识

1 asyncio的优势 asyncio 和 threading 都是 Python 中处理并发的方式&#xff0c;但它们各有优势。 效率&#xff1a;asyncio 是基于单线程的&#xff0c;它通过协程&#xff08;coroutine&#xff09;实现并发&#xff0c;协程之间的切换开销小于线程之间的切换开销。在 I/O…