你知道 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]
|
数据采集 前端开发 开发者
滑动拼图验证码的原理和破解方法~
滑动拼图验证码的原理和破解方法~
3718 0
滑动拼图验证码的原理和破解方法~
|
资源调度 运维 JavaScript
使用electron创建桌面应用及常见打包错误解决
使用electron创建桌面应用及常见打包错误解决
1473 3
|
JSON 前端开发 安全
XHR 和 Fetch方法小知识
【6月更文挑战第7天】XHR 和 Fetch方法小知识
986 0
|
存储 供应链 分布式数据库
深入理解区块链技术:原理、应用与挑战
本文旨在探讨区块链技术的基本原理、主要应用及其面临的挑战。通过分析区块链的分布式账本技术、加密算法和共识机制,我们揭示了其如何在无需中心化权威的情况下确保数据的不可篡改性和透明性。此外,文章还讨论了区块链在金融、供应链管理、智能合约等领域的应用案例,并指出了当前区块链技术面临的可扩展性、隐私保护和法律监管等挑战。通过对这些内容的深入分析,我们希望为读者提供一个全面而深入的区块链技术概览。
1595 16
|
存储 Web App开发 安全
如何防范 CSRF 攻击
CSRF(跨站请求伪造)攻击是一种常见的安全威胁。防范措施包括:使用Anti-CSRF Token、检查HTTP Referer、限制Cookie作用域、采用双重提交Cookie机制等,确保请求的合法性与安全性。
|
缓存 前端开发 JavaScript
Webpack 4 和 Webpack 5 区别?
【10月更文挑战第23天】随着时间的推移,Webpack 可能会继续发展和演进,未来的版本可能会带来更多的新特性和改进。保持对技术发展的关注和学习,将有助于我们更好地应对不断变化的前端开发环境。
|
JavaScript 算法 前端开发
【VUE】Vue的diff算法和React的diff算法
【VUE】Vue的diff算法和React的diff算法
|
前端开发 BI
前端基础(十)_标签分类(行级标签、块级标签、行块标签)
本文阐述了HTML标签的分类,包括行级标签、块级标签和行块标签,并展示了如何使用CSS的display属性实现标签类型之间的转换。
559 3