你知道 XHR 和 Fetch 的区别吗?

简介: 你知道 XHR 和 Fetch 的区别吗?

当谈论Web开发中的数据请求时,XHR(XMLHttpRequest)和Fetch API是两个常用的工具。它们都是用于从服务器获取数据的技术,但在实现和功能上存在一些区别。下面将详细讨论XHR和Fetch的区别。

XMLHttpRequest(XHR)

1. 发起请求

XHR是一个用于发起HTTP请求的JavaScript对象。通过实例化一个XHR对象,可以设置请求的各种参数,如请求类型(GET、POST等)、URL、是否异步等。

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data', true);
xhr.send();

2. 异步处理

XHR默认是异步的,可以通过设置第三个参数为false来将其变为同步。异步请求通过事件处理函数来处理响应。

xhr.onreadystatechange = function() {
   
  if (xhr.readyState == 4 && xhr.status == 200) {
   
    console.log(xhr.responseText);
  }
};

3. 请求和响应类型

XHR支持多种请求和响应类型,包括文本、JSON、XML等。可以通过设置xhr.responseType来指定希望得到的响应类型。

xhr.responseType = 'json';

Fetch API

1. 简化的API

Fetch是一种更现代的API,提供了一种更简单和灵活的方式来进行网络请求。

fetch('https://example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

2. 返回Promise

Fetch返回一个Promise,使得代码更加清晰和易于处理。它采用了链式调用,可以方便地处理请求和响应。

3. 请求和响应对象

Fetch引入了RequestResponse对象,可以更方便地构建请求和处理响应。

var myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');

var myInit = {
   
  method: 'POST',
  headers: myHeaders,
  body: JSON.stringify({
    key: 'value' }),
  mode: 'cors',
  cache: 'default'
};

fetch('https://example.com/data', myInit)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

总结

XHR和Fetch都是用于进行数据请求的工具,但Fetch提供了更简单、灵活和现代的API。Fetch返回Promise,采用了更直观的链式调用,同时引入了RequestResponse对象,使得请求和响应的处理更加清晰。XHR仍然是许多项目中的标准,但Fetch逐渐成为首选工具,特别是在现代Web开发中。在选择使用其中之一时,开发者应该根据项目需求和个人偏好做出明智的选择。

目录
相关文章
|
JavaScript 前端开发 编译器
看完这篇文章,不再害怕Vue3的源码(一)
看完这篇文章,不再害怕Vue3的源码
|
消息中间件 移动开发 JavaScript
JSBridge:混合开发中的双向通信[Android、iOS&JavaScript]
WebView 是移动端中的一个控件,它为 JS 运行提供了一个沙箱环境。WebView 能够加载指定的 url,拦截页面发出的各种请求等各种页面控制功能,JSB 的实现就依赖于 WebView 暴露的各种接口。由于历史原因,IOS以8为分界,Android以4.4为分界,分为高低两个版本。而它们的区别在于 —— 回调。高版本可以通过执行回调拿到 JS 执行完毕的返回值,然后准确进行下一步操作。而低版本无法执行回调!Hybrid App 的核心。
JSBridge:混合开发中的双向通信[Android、iOS&JavaScript]
|
资源调度 算法 JavaScript
Python基础专题 - 超级详细的 Random(随机)原理解析与编程实践
Python基础专题 - 超级详细的 Random(随机)原理解析与编程实践
1746 0
|
索引 存储 数据库
数据库设计规范
基于阿里数据库设计规范扩展而来
50877 4
|
资源调度 运维 JavaScript
使用electron创建桌面应用及常见打包错误解决
使用electron创建桌面应用及常见打包错误解决
1720 3
|
JSON 前端开发 安全
XHR 和 Fetch方法小知识
【6月更文挑战第7天】XHR 和 Fetch方法小知识
1154 0
|
存储 Web App开发 安全
如何防范 CSRF 攻击
CSRF(跨站请求伪造)攻击是一种常见的安全威胁。防范措施包括:使用Anti-CSRF Token、检查HTTP Referer、限制Cookie作用域、采用双重提交Cookie机制等,确保请求的合法性与安全性。
|
前端开发 JavaScript
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
2584 8
|
前端开发 BI
前端基础(十)_标签分类(行级标签、块级标签、行块标签)
本文阐述了HTML标签的分类,包括行级标签、块级标签和行块标签,并展示了如何使用CSS的display属性实现标签类型之间的转换。
675 3
|
存储 安全 前端开发
在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
1691 0