XMLHttpRequest

目录

      • 创建 XMLHttpRequest 对象
      • 配置请求
      • 设置请求头
      • 发送请求
      • 处理响应
      • 取消请求
      • loadend

XMLHttpRequest 是一个 JavaScript API,它提供了一种在客户端与服务器进行数据交换的方式,可以在不刷新页面的情况下异步更新部分网页内容。虽然现代开发中越来越多地使用 axios API 来处理网络请求, XMLHttpRequest 仍然是理解浏览器中网络通信的重要知识点。

  1. AJAX 是浏览器与服务器通信的技术,采用 XMLHttpRequest 对象相关代码

  2. axios 是对 XHR 相关代码进行了封装,让我们只关心传递的接口参数

  3. 学习 XHR 也是了解 axios 内部与服务器交互过程的真正原理

在这里插入图片描述

创建 XMLHttpRequest 对象

要使用 XMLHttpRequest,首先需要创建一个 XMLHttpRequest 对象的实例:

var xhr = new XMLHttpRequest();

配置请求

使用 open 方法配置请求:

xhr.open(method, url, async);
  • method: HTTP 请求的方法,如 “GET” 或 “POST”。
  • url: 数据的 URL。
  • async: 可选参数,默认为 true,代表是否进行异步请求。如果为 false,则请求为同步。

设置请求头

通过 setRequestHeader 方法设置 HTTP 请求头:

xhr.setRequestHeader('Content-Type', 'application/json');

发送请求

使用 send 方法发送请求:

xhr.send(data);
  • data: 要发送的数据体,GET 请求通常将此参数设置为 null

处理响应

可以通过监听 XMLHttpRequest 对象的事件来处理响应。

1.load: 请求成功完成时触发。

2.error: 请求失败时触发。

3.readystatechange: 请求的 readyState 属性发生变化时触发。

例如,可以使用 onloadonerror 事件处理器:

xhr.onload = function() {// 请求成功,这里可以处理响应内容if (xhr.status >= 200 && xhr.status < 300) {// 解析响应内容console.log(JSON.parse(xhr.responseText));} else {// 处理 HTTP 错误console.error('HTTP Error: ' + xhr.status);}
};xhr.onerror = function() {// 通信发生错误时,会调用此函数console.error('Network Error');
};

或者使用 onreadystatechange 事件处理器:

xhr.onreadystatechange = function() {if (xhr.readyState === XMLHttpRequest.DONE) {// 请求完成if (xhr.status === 200) {// 如果是 HTTP 200 OK,则处理返回的数据console.log(xhr.responseText);} else {// 否则处理其他 HTTP 状态码console.error("HTTP Error: " + xhr.status);}}
};

readyState 常用值表示:

  • 0 (UNSENT): open() 方法还未被调用。
  • 1 (OPENED): open() 方法已被调用,可以设置请求头和发送请求。
  • 2 (HEADERS_RECEIVED): send() 方法已被调用,响应头和响应状态已可获取。
  • 3 (LOADING): 响应体正在被接收。
  • 4 (DONE): 请求操作已完成,全部响应已可用。

取消请求

如果需要取消已经发出的请求,可以使用 abort 方法:

xhr.abort();

loadend

loadend 事件在处理 XMLHttpRequest 请求时代表请求已经完成,不管请求是成功了(load 事件),还是失败了(error 事件),或者是被中断了(abort 事件)。这个事件响应时,会在 XMLHttpRequest 对象的 response 属性中包含请求的响应内容,如果有的话。

下面是如何使用 loadend 事件的示例:

var xhr = new XMLHttpRequest();xhr.open('GET', '/api/some-endpoint', true);xhr.onloadend = function(event) {// 此处的 event 是一个 ProgressEvent 对象if (xhr.status >= 200 && xhr.status < 300) {console.log('请求成功:', xhr.responseText);} else {console.error('请求结束,但是遇到错误:', xhr.status);}// 不管请求成功或失败,这里总是会被调用console.log('请求结束。这里可以执行一些清理操作。');
};xhr.send();

const xhr = new XMLHttpRequest()
xhr.open('请求方法', '请求url网址')
xhr.addEventListener('loadend', () => {// 响应结果console.log(xhr.response)
})
xhr.send()

在这个示例中,loadend 事件的回调函数总是会在请求过程完成后被调用,无论请求成功还是失败。这意味着你可以使用这个事件来清理或执行必需的后续步骤,比如停止显示一个加载指示器。

loadend 事件的好处是你不必单独写两个或者三个处理器(分别对 load, error, abort 事件),因此你可以将所有 “请求结束” 相关的处理逻辑集中在一个地方。但是,如果你需要对不同的结束情况进行细致的区分处理,那么单独监听 load, error, 和 abort 事件可能会更有帮助。

虽然 XMLHttpRequest 在历史上非常重要,但现代 web 开发中建议使用 fetch() API,因为它提供了更简洁的语法和基于 Promise 的接口。

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

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

相关文章

深入浅出XTTS:Oracle数据库迁移升级利器

演讲大纲&#xff1a; 1. 什么是XTTS 2. 适用场景 3. XTTS的基本操作步骤 4. XTTS案例分享 今天主要跟大家分享一下XTTS,在网上曾看过相关讨论,但发现按网上讲的那些去实际操作的话,还是会遇到一些坑,并不能实际落下来,所以今天想跟大家分享一些实战干货. 一、什么是XTTS …

Redis偶发Cannot determine a partition for slot报错问题

Redis偶发Cannot determine a partition for slot报错问题 一、背景二、问题定位1、报错位置2、lettuce定时刷新任务3、本地缓存masterCache先清理后写入的问题 三、解决方案&#xff1a;版本升级 一、背景 线上系统&#xff08;springboot&#xff09;经常报错Cannot determi…

Linux内存管理:(六)页交换算法

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 引言 在Linux操作系统中&#x…

6592A便携式高精度光伏电池伏安特性测试仪

6592A便携式高精度光伏 电池伏安特性测试仪 光伏仪器 主要用于室外太阳能电池阵列/组件/电池片伏安特性测试 国产思仪 01 产品综述 6592A便携式高精度光伏电池伏安特性测试仪&#xff0c;主要用于室外太阳能电池阵列/组件/电池片伏安特性测试&#xff0c;能够方便、快速的…

系列三十三、如何将一个springboot jar做成批处理文件

一、将一个springboot jar做成批处理文件 1.1、需求 最近在写【Spring Cloud Alibaba】的系列文章&#xff0c;其中有一个部分是安装Sentinel控制台&#xff0c;使用命令执行完全没有问题&#xff0c;但是命令太长了&#xff0c;每次启动时都要找笔记&#xff0c;然后粘贴到命…

小兔鲜儿 uniapp - 项目打包

目录 微信小程序端​ 核心步骤​ 步骤图示​ 条件编译​ 条件编译语法​ 打包为 H5 端​ 核心步骤​ 路由基础路径​ 打包为 APP 端​ 微信小程序端​ 把当前 uni-app 项目打包成微信小程序端&#xff0c;并发布上线。 核心步骤​ 运行打包命令 pnpm build:mp-weix…

C语言编译器(C语言编程软件)完全攻略(第十三部分:VS2010使用教程(使用VS2010编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 十三、VS2010使用教程&#xff08;使用VS2010编写C语言程序&#xff09; 提示&#xff1a;VS2010 可以在 XP、Win7 和 Win8 下完美运行&#xff0c;但在 Win10 下可能会有兼容性问题&#xff0c;使用 Win10 的读者建议安装 VS2015 或…

四种“栈溢出检测方法”实现分析(2种纯软件、一种纯硬件、一种软硬件结合)

1、两种纯软件的栈溢出检测方法 参考博客&#xff1a;《freeRTOS的栈溢出检测机制》&#xff1b; 2、纯硬件&#xff1a;使用栈限制寄存器 2.1、工作逻辑分析 前提条件&#xff1a;使用满减栈硬件上提供栈限制寄存器&#xff08;用SP_limit表示&#xff09;&#xff0c;可以…

HttpRunner自动化测试之实现参数化传递

参数化实现及重复执行 参数化测试&#xff1a;在接口测试中&#xff0c;为了实现不同组数据对同一个功能模块进行测试&#xff0c;需要准备多组测试数据对模块进行测试的过程。 在httprunner中可以通过如下方式实现参数化&#xff1a; 1、在YAML/JSON 中直接指定参数列表 2、…

2024年5大海外代理IP测评推荐

在跨境电商行业&#xff0c;想要发送安全运营跨境电商账号&#xff0c;多账号社媒推广&#xff0c;独立站SEO优化等等的业务都少不了代理IP工具。安全高质的代理IP可以保障你的网络活动安全、匿名、高效。 面对众多代理IP商&#xff0c;您是否很难做出购买决定&#xff1f;哪些…

FinGPT——金融领域开源大模型

文章目录 背景论文摘要相关工作大型语言模型&#xff08;LLMs&#xff09;和ChatGPT金融领域的LLMs为什么需要开源的金融LLMs&#xff1f; 以数据为中心的方法用于FinLLMs金融数据和独特特性应对处理金融数据的挑战 FINGPT 概述&#xff1a;FINLLM 的开源框架数据来源面向金融N…

C++进阶(一)继承

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、继承的概念及定义1、继承的概念2、继承定义1、定义格式2、继承关系和访问限定符3、继承基…