Fetch基于Promise语法更简洁,适合现代开发;Ajax兼容性好但代码冗长。两者在错误处理、配置灵活性上有差异,Fetch需手动判断响应状态,支持现代化配置,而Ajax需手动管理状态。新项目推荐Fetch或Axios,旧环境可选Ajax。

在前端开发中,发送网络请求是与服务器交互的核心操作。长期以来,Ajax(通常指通过 XMLHttpRequest 实现)是处理异步请求的主要方式。随着现代浏览器的发展,Fetch API 逐渐成为更推荐的选择。本文将从语法、使用方式、兼容性、错误处理等方面对比 Ajax 与 Fetch,帮助你理解两者的差异和适用场景。
Fetch 的一大优势是基于 Promise,语法更加简洁清晰,尤其适合现代 JavaScript 开发。
```javascript
const xhr = new XMLHttpRequest();
xhr.open('GET', '/api/data', true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(JSON.parse(xhr.responseText));
}
};
xhr.send();
```
```javascript
fetch('/api/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(err => console.error(err));
```
立即学习“Java免费学习笔记(深入)”;
或者使用 async/await:
```javascript
const getData = async () => {
try {
const response = await fetch('/api/data');
const data = await response.json();
console.log(data);
} catch (err) {
console.error(err);
}
};
```
两者在错误处理上的逻辑有显著区别,容易引发误解。
```javascript
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return response.json();
})
.then(data => console.log(data))
.catch(err => console.error(err));
```
两者都支持自定义请求头、方法、body 等,但 Fetch 的配置方式更现代化。
```javascript
// Fetch 配置清晰
fetch('/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ username: 'test', password: '123' }),
});
```
Ajax 也能实现,但需要手动设置请求头和序列化数据,代码更繁琐。
```javascript
const controller = new AbortController();
setTimeout(() => controller.abort(), 5000); // 5秒超时
fetch('/api/data', { signal: controller.signal })
.then(...)
.catch(err => {
if (err.name === 'AbortError') console.log('请求超时');
});
```
虽然 Fetch 更现代,但在一些旧环境(如 IE)中不被支持。Ajax 兼容性更好,几乎可在所有浏览器运行。
whatwg-fetch polyfill。基本上就这些。Fetch 是未来的方向,语法更干净,集成 Promise 更自然;而 Ajax 虽老,但原理重要,理解它有助于深入掌握网络请求机制。选择哪个,取决于你的项目需求和目标环境。
以上就是JavaScript网络请求_Ajax与Fetch对比的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号