您的位置:首页 > 新闻 > 资讯 > 做网页网站_小网站下载渠道有哪些_搜索引擎营销的五大特点_运营推广计划怎么写

做网页网站_小网站下载渠道有哪些_搜索引擎营销的五大特点_运营推广计划怎么写

2025/1/13 2:42:22 来源:https://blog.csdn.net/motoudi/article/details/144228682  浏览:    关键词:做网页网站_小网站下载渠道有哪些_搜索引擎营销的五大特点_运营推广计划怎么写
做网页网站_小网站下载渠道有哪些_搜索引擎营销的五大特点_运营推广计划怎么写

AJAX中有两套原生的API,一个是XHR(XMLHttpRequest),一个是Fetch API

axios是第三方库,在浏览器环境中使用的是XHR

umi-request也是第三方库,在浏览器环境中使用的是Fetch

在 AJAX(Asynchronous JavaScript and XML)中,原生的 API 主要有两种:XMLHttpRequest(简称 XHR)和Fetch API。这两者都用于在客户端与服务器之间进行异步通信,但它们有一些关键的区别,尤其是在使用方式、功能和灵活性上。以下是两者的详细比较和作用。

1.XMLHttpRequest(XHR)

XMLHttpRequest 是最早用于在浏览器中执行异步 HTTP 请求的 API,通常用于实现 AJAX 请求。它自 1999 年起就已被引入,长期以来是进行异步请求的标准方法。

主要特点:

- 语法复杂:使用起来相对较复杂,需要更多的配置和回调函数来处理请求的各个阶段(如发送请求、接收响应等)。

- 回调函数:它使用回调函数来处理异步响应,需要监听onreadystatechange 事件,或使用onload、onerror 等事件处理程序来处理响应。

- 支持的请求类型:XMLHttpRequest 支持多种 HTTP 请求方法(如GET、POST、PUT、DELETE 等)。

- 支持同步和异步请求:可以选择同步(阻塞)或异步(非阻塞)请求,但同步请求会导致浏览器冻结,影响用户体验,因此通常不推荐使用同步请求。

- 支持跨域请求:通过XMLHttpRequest 进行跨域请求时,需要使用 CORS(跨域资源共享)机制。

const xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data", true); // true表示异步请求xhr.onreadystatechange = function () {if (xhr.readyState === XMLHttpRequest.DONE) {if (xhr.status === 200) {console.log("Response:", xhr.responseText); // 处理响应数据} else {console.error("Request failed with status:", xhr.status);}}
};xhr.send(); // 发送请求

优缺点:

- 优点:

- 支持所有主流浏览器。

- 可以处理复杂的请求场景。

- 缺点:

- 使用起来较为复杂,需要手动管理事件和回调。

- 不支持 Promise,需要额外处理异步操作。

---

2.Fetch API

Fetch API 是现代浏览器中新加入的用于发起网络请求的 API,相比XMLHttpRequest,Fetch 提供了更简洁、更强大的语法,并且它基于 Promise,支持更直观的异步操作。

主要特点:

- 基于 Promise:Fetch API 基于 Promise,这使得异步操作更加简洁和灵活。可以通过then() 和catch() 方法处理请求结果和错误。

- 默认异步:Fetch 请求默认是异步的,因此不会阻塞线程,也没有必要手动设置异步标志。

- 不支持同步请求:与XMLHttpRequest 不同,Fetch 不支持同步请求,始终是异步的。

- 响应处理:Fetch 返回的响应对象提供了更丰富的方法来处理响应数据,例如可以方便地将响应解析为 JSON、文本、二进制数据等。

- 支持 CORS:Fetch 与XMLHttpRequest 一样,支持跨域请求,但其跨域配置更加简洁。

示例代码:

fetch("https://api.example.com/data").then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json(); // 解析为 JSON}).then(data => {console.log("Response data:", data); // 处理数据}).catch(error => {console.error("There was a problem with the fetch operation:", error);});

优缺点:

- 优点:

- 基于 Promise,代码更加简洁、易于理解和维护。

- 更好地支持现代 JavaScript 的异步操作(如 async/await)。

- 对于响应处理(如 JSON 解析)更加方便和灵活。

- 缺点:

- 不支持较旧的浏览器(如 IE)。不过可以通过 polyfill 进行兼容。

- 需要手动处理 HTTP 错误(fetch 仅在网络失败时抛出错误,HTTP 错误状态(如 404、500)不会抛出异常)。

---

3. 关键区别

特性

XMLHttpRequest

Fetch API

API 风格

基于事件回调和状态变化

基于 Promise,支持 thencatch 语法

默认异步

支持同步和异步(不推荐使用同步)

始终为异步

响应处理

使用 xhr.responseText,需要手动解析数据

支持直接解析为 JSON、文本、二进制等

支持的功能

需要手动设置跨域(CORS)、状态检查等

自动处理跨域,默认遵循 CORS 标准

错误处理

需要监听 onerroronreadystatechange 事件

只会在网络错误时抛出异常,需要手动处理 HTTP 错误

支持的浏览器

广泛支持(包括较旧的浏览器)

主要支持现代浏览器,需要 polyfill 来兼容旧版浏览器

同步请求

支持(但不推荐)

不支持同步请求

功能点:

4. 总结

-XMLHttpRequest 是传统的 API,适合处理兼容性要求较高的项目,但使用起来较为繁琐,特别是处理回调和异步操作时。

-Fetch API 是现代的、基于 Promise 的 API,提供了更简洁的语法,易于使用,尤其是与async/await 结合使用时,代码更加清晰和可维护。不过,它不支持同步请求,并且需要现代浏览器支持。

因此,现代 Web 开发中,Fetch API 更为推荐,特别是当你的目标浏览器支持它时。如果需要兼容老旧浏览器,可能仍然需要使用XMLHttpRequest 或结合使用 polyfill 来实现。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com