ajax请求和fetch请求的区别
ChatGPT 说:
ChatGPT
Ajax(基于 XMLHttpRequest)和 Fetch API 都可以用于在前端进行网络请求,但它们在使用方式和功能上有一些重要区别。下面是它们的详细对比:
1. 语法
-
XMLHttpRequest(Ajax) :XMLHttpRequest的语法相对繁琐,需要编写更多代码来处理请求、响应和错误。javascript 复制代码 const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://api.example.com/data', true); xhr.onload = function () { if (xhr.status >= 200 && xhr.status < 300) { console.log(JSON.parse(xhr.responseText)); } else { console.log('Request failed'); } }; xhr.onerror = function () { console.log('Request error'); }; xhr.send(); -
Fetch:Fetch的语法更加简洁,基于Promise,可以直接使用then和catch来处理异步逻辑,或者使用async/await。javascript 复制代码 fetch('https://api.example.com/data') .then(response => { if (!response.ok) { throw new Error('Request failed'); } return response.json(); }) .then(data => console.log(data)) .catch(error => console.error('Error:', error));或者使用
async/await:javascript 复制代码 async function getData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error('Request failed'); } const data = await response.json(); console.log(data); } catch (error) { console.error('Error:', error); } } getData();
2. 返回类型
-
XMLHttpRequest:responseText是纯文本格式,默认不做解析,必须手动解析成 JSON。- 支持响应类型设置为
document,json,blob等。
-
Fetch:Fetch的返回值是一个Promise,返回的Response对象提供了多种方法,如.json()、.text()、.blob(),更方便获取不同格式的响应数据。
3. Promise 支持
-
XMLHttpRequest:- 基于回调函数,不支持原生
Promise,需要手动封装或使用库(如axios)来实现Promise式请求。
- 基于回调函数,不支持原生
-
Fetch:- 基于
Promise,可以直接使用then和catch链式处理异步逻辑。还可以结合async/await使用,更符合现代 JavaScript 的异步编程风格
- 基于