fetch和XHR的区别

fetch和XHR(XMLHttpRequest)分别是什么?

  • fetch和XHR都是是获取远端数据的方式。
  • fetch是原生js方法,没有使用XMLHttpRequest对象,使用fetch可以不用引用http的类库即可实现。提供了一种简单,合理的方式来跨网络异步获取资源。
  • XMLHttpRequest(XHR)是一个构造函数,对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL。即允许网页在不影响用户操作的情况下,更新页面的局部内容。可以用于获取任何类型的数据。

fetch的一些问题

1)fetch只对网络请求报错,对400,500都当做成功的请求,服务器返回 400,500 错误码时并不会 reject,只有网络错误这些导致请求不能完成时,fetch 才会被 reject。
2)fetch默认不会带cookie,需要添加配置项: fetch(url, {credentials: 'include'})
3)fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费
4)fetch没有办法用原生监测异步请求,而XHR可以

fetch同构方便,使用isomorphic-fetch

.fetch 不管请求处理成功还是失败,都会触发promise的resolve状态回掉。这个和传统的ajax 框架是有点区别的。fetch只有当网络故障导致请求发送失败或者跨域的时候才会触发reject的逻辑。我们可以通过response 对象的ok是否是true来判断是否是真正的成功。

XHR 和 Fetch 的使用详解和区别总结_陆小森_红齐飘飘的博客-CSDN博客

fetch和XHR的区别

1、调用方式不同

用 XHR 发起一个GET请求

var xhr = new XHMHttpRequest();
xhr.open('GET', url);
xhr.responseType = 'json';
xhr.onload = function(){
    console.log(xhr.response);
};
xhr.onerror = function(){
    console.log('something wrong~ ╮( ̄▽ ̄)╭');
};
xhr.send();

用 Fetch 完成同样的请求 

fetch(url).then(function(response){
    return response.json();
}).then(function(jsonData){
    console.log(jsonData);
}).catch(function(){
    console.log('something wrong~ ╮( ̄▽ ̄)╭');
});

fetch和XHR请求有关的特性

https://segmentfault.com/a/1190000010417624

二者的缺点

1、fetch有兼容问题

两者的未来

Fetch API未来基于 Fetch 和 Service Worker 的缓存和请求拦截技术。

fetch与XHR的区别与优势 - 左耳的风铃lal - 博客园

  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: fetch/xhr和其他请求(如axios、ajax等)之间的主要区别在于它们的使用方式和一些功能上的不同。 首先,fetch是一种基于Promise的现代化网络请求API,而xhr是一种传统的XMLHttpRequest对象。fetch API基于新的web标准,可以更好地处理请求和响应,支持更多现代化的功能,而xhr则是老旧的方式。 另一个区别在于fetch API返回的是一个Promise对象,可以使用Promise的链式调用和async/await语法,非常方便处理异步操作。而xhr则需要使用回调函数来处理异步操作,代码结构可能相对复杂。 此外,fetch API默认情况下不会携带cookie信息,需要设置credentials属性为"include"才能发送cookie。而xhr默认会发送cookie信息,需要手动设置xhr.withCredentials属性为true来禁止发送cookie。 另外,fetch API在默认情况下只会拒绝请求错误的状态码(如404或500等),而不会拒绝其他的网络错误(如网络超时)。这意味着需要手动检查并处理网络错误。而xhr则可以通过onerror事件来处理所有类型的网络错误。 最后,fetch API在使用上可能相对简单,语法更加直观。而xhr则相对复杂,需要手动设置请求头、处理请求和响应等。 总结起来,fetch/xhr和其他请求的主要区别在于使用方式、功能支持和代码结构等方面。fetch提供了更现代化、更简洁的API,支持Promise和async/await语法,但xhr仍然是一种可靠和广泛使用的老旧方式。 ### 回答2: fetch和XMLHttpRequest (XHR) 是两种常用的网络请求方式,它们之间有以下几点区别: 1. 语法使用:fetch是浏览器提供的一种基于Promise的现代API,通过使用ES6的语法,使用更加简洁。XHR则是使用传统的回调函数的方式,使得代码可读性较差。 2. URL和参数:在使用fetch时,可以将URL和请求参数作为参数传递给fetch函数。XHR需要手动构建URL和参数,增加了额外的代码。 3. 跨域请求:fetch默认不会将跨域的cookie发送到目标服务器,需要设置`credentials`配置项为"include"。而XHR请求跨域时会自动携带cookie。 4. 请求头配置:fetch通过调用`Headers`对象来设置请求头信息,更加方便。XHR则需要通过`setRequestHeader`方法来设置。 5. 请求/响应:使用fetch时,需要通过两个Promise分别处理请求和响应,使得代码更加清晰。XHR则需要编写多个回调函数来处理请求与响应,并引发回调地狱问题。 6. 取消请求:使用fetch时,可以使用`AbortController`对象来取消正在进行的请求。XHR则需要手动使用`abort`方法来取消请求。 综上所述,fetch相比XHR具有更好的语法简洁性、使用更加方便、处理异步操作更加优雅等优点,但XHR在兼容性和一些特殊场景处理方面表现更好。所以,在选择网络请求方式时,根据具体的场景需求进行选择。 ### 回答3: fetchXHR(XMLHttpRequest)都是用于发送HTTP请求并获取响应的JavaScript API。它们的主要区别如下: 1. 语法:fetch使用更简洁的语法,基于Promise实现,而XHR使用回调函数来处理异步请求。 2. 兼容性:XHR在所有主流浏览器中都得到了广泛支持,包括较旧的版本。而fetch在一些旧版本的浏览器中可能不被完全支持,需要使用polyfill进行兼容。 3. 请求和响应对象:XHR通过实例化XMLHttpRequest对象,并使用该对象来发送请求和接收响应。而fetch直接使用全局fetch函数来发送请求并返回一个Promise对象,该对象包含响应的相关信息。 4. 请求和响应的处理:XHR可以通过各种回调函数来处理请求和响应,包括onload、onerror和onprogress等。而fetch使用then方法链式调用来处理请求和响应,也可以使用catch捕获错误。 5. 默认不接受跨域请求:在默认情况下,XHR在同源策略下才能发送跨域请求。而fetch在跨域请求时,默认不发送站点的身份验证cookie和HTTP认证信息,需要手动设置credentials为include。 总的来说,fetch相对于XHR提供了更简洁的语法和更强大的功能,并且更符合现代JavaScript的编码风格。但是在兼容性方面,XHR更广泛支持,可以在更多的浏览器环境中使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值