Fetch API 与 XMLHttpRequest
XMLHttpRequest 对象用于异步与服务器通信,这意味着我们可以在不刷新整个页面的情况下,在后台与服务器交换数据。XMLHttpRequest 是最常用的技术,因此它被大多数主流浏览器如 Google Chrome、Safari、Mozilla Firefox 或 Opera 使用。它还支持纯文本、JSON 数据以及更多数据格式。它使用非常简单,并提供了各种方法和属性来执行操作。我们可以使用 XMLHttpRequest() 构造函数创建一个 XMLHttpRequest 对象。
语法
variableName = new XMLHttpRequest()
使用 new 关键字结合 XMLHttpRequest() 构造函数,我们可以创建一个新的 XMLHttpRequest 对象。在调用 send() 函数向 Web 服务器发送请求之前,必须先创建此对象并调用 open() 函数来初始化它。
Fetch API 提供了一个接口,用于从服务器获取/检索资源。它是 XMLHttpRequest 的现代替代方案。它支持 Request 和 Response 的通用定义,因此如果需要,我们可以在未来访问它们,用于 Cache API、Service Worker、处理或修改请求和响应等。它非常简单、一致且易用。或者可以说,与 XMLHttpRequest 相比,它为创建 HTTP 请求和处理响应提供了更现代和灵活的方法。它基于 Promise API,提供清晰的语法和更好的错误处理。
语法
fetch(res)
其中 fetch() 接受一个必需参数 res。res 参数定义了您想要获取的资源,它可以是字符串、其他对象或 request 对象。除了必需参数外,它还可以接受一个可选参数,例如 method、headers、body、mode、cache、same-origin 等。
Fetch API 与 XMLHttpRequest
以下是 Fetch API 和 XMLHttpRequest 之间的区别:
| 区别 | Fetch API | XMLHttpRequest |
|---|---|---|
语法 |
如我们所知,Fetch API 是基于 Promise 的 API,因此它提供了更清晰的语法和更好的错误处理方法。 |
XHR 基于回调方法,其语法不如 Fetch API 好。 |
跨源资源共享 (CORS) |
Fetch API 智能处理 CORS 请求,无需任何额外配置。 |
XMLHttpRequest 需要特殊配置来处理或发出跨源请求。 |
请求和响应头 |
Fetch API 提供了更灵活的方式来处理请求和响应头。 |
XMLHttpRequest 提供了有限的方法来处理请求和响应头。 |
流式传输和解析 |
Fetch API 提供了良好的流式传输和解析大型响应的支持,从而提升性能并减少内存使用。 |
XMLHttpRequest 需要自定义程序来实现此功能。 |
浏览器兼容性 |
Fetch API 是新技术,因此可能不受旧版浏览器支持。 |
XMLHttpRequest 已使用多年,因此几乎被所有浏览器支持。 |
Cookies 和凭据控制 |
Fetch API 提供了对 cookies 和凭据的良好控制,因此与 XMLHttpRequest 相比,我们可以更容易进行身份验证和授权。 |
XMLHttpRequest 对 cookies 和凭据的支持较少。 |
超时 |
Fetch API 不支持超时,因此请求将持续直到浏览器选择该请求。 |
XMLHttpRequest 支持超时。 |
结论
这些是 Fetch API 和 XMLHttpRequest 之间的主要区别。Fetch API 比 XMLHttpRequest 更强大且更容易理解。它也得到所有现代浏览器的支持,但 XMLHttpRequest 仅受旧版浏览器支持。现在,在下一篇文章中,我们将学习 fetch() 函数。