Fetch和XHR有什么区别?

区别:

  1. 原生API vs ES6新增函数:XHR 是浏览器提供的原生API,而 fetch 是 ES6 中新增的全局函数。

  2. 使用对象差异:XHR 使用 XMLHttpRequest 对象,而 fetch 使用 Promise 对象。

  3. Cookies 默认携带:fetch 默认不会携带 cookies,需要手动设置 credentials 属性;而 XHR 请求会自动携带 cookies。

  4. 请求取消能力:XHR 可以取消一个正在进行的请求,而 fetch 目前没有原生的请求取消机制。

  5. 响应类型处理:XHR 的 responseType 属性可以设置响应类型(text、json、blob 等),而 fetch 需要手动解析响应。

  6. 进度监听功能:XHR 可以监听上传和下载的进度,而 fetch 不支持此功能。

  7. 错误处理方式:在错误处理方面,fetch 只会在网络错误时 reject Promise,其他错误都会被视为成功的响应,需要手动判断;而 XHR 则会在出现错误时 reject Promise。

  8. 兼容性:XHR 兼容性更好,在一些旧版本的浏览器中可能无法使用 fetch。

代码示例:

使用 XHR 发送 GET 请求:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
console.log(response);
}
};
xhr.send();

一些解释:

xhr.open的第三个参数是用于指示请求是否为异步的布尔值。
如果将它设置为 true,则表示该请求是异步的,JavaScript 会在请求发送后继续执行并等待响应。
如果设置为 false,则表示该请求是同步的,JavaScript 会在发送请求后一直等待直到收到响应为止。


XMLHttpRequest 对象的 readyState 属性表示请求的状态,status 属性表示 HTTP 状态
readyState 的可能取值包括:
0: 未初始化,尚未调用 open 方法
1: 启动,已经调用 open 方法,但尚未调用 send 方法
2: 发送,已经调用 send 方法,但尚未接收到响应
3: 接收,已经接收到部分数据
4: 完成,已经接收到全部数据,并且可以在客户端使用
status 的可能取值包括(部分常见的):
200: 请求成功
404: 未找到页面
500: 服务器内部错误
302: 重定向等


使用 fetch 发送 GET 请求:

fetch('https://api.example.com/data')
.then(function(response) {
if (response.ok) {
return response.json();
} else {
throw new Error('Network response was not ok.');
}
})
.then(function(data) {
console.log(data);
})
.catch(function(error) {
console.log(error);
});
posted @   脆皮鸡  阅读(1449)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示