fetch 和 XMLHttpRequest (XHR) 都是用于进行网络请求的工具,但它们之间存在一些重要区别:
API 设计:
fetch 是基于 Promise 的现代API,提供了更简洁和强大的方式来处理网络请求和响应。
XMLHttpRequest (XHR) 是传统的 API,使用事件处理程序来处理请求和响应。
语法:
fetch 使用链式调用的语法,更易于理解和编写,可以返回 Promise 对象。
XMLHttpRequest (XHR) 使用回调函数,需要编写多个回调函数来处理不同阶段的请求。
跨域请求:
fetch 默认启用跨域请求,但在浏览器中使用时,需要注意跨域问题。
XMLHttpRequest (XHR) 发送跨域请求时需要特殊配置,例如设置响应头中的 Access-Control-Allow-Origin。
数据传输:
fetch 使用 Promise 处理响应数据,可以轻松处理 JSON、文本、Blob 和其他数据类型。
XMLHttpRequest (XHR) 通常需要根据响应的 responseType 属性来处理不同类型的响应数据。
取消请求:
fetch 不提供内置的请求取消机制,但可以使用 AbortController 来取消请求。
XMLHttpRequest (XHR) 可以使用 abort() 方法来取消正在进行的请求。
并行请求:fetch 更容易实现并行请求,因为它返回 Promise,可以使用 Promise.all()。
XMLHttpRequest (XHR) 在处理并行请求时需要小心,可能需要使用回调嵌套或其他技巧。
总的来说,fetch 是更现代、更灵活的方式来处理网络请求,尤其在使用 Promise 和处理 JSON 数据时更为方便。但对于旧的浏览器和传统项目,XMLHttpRequest (XHR) 仍然是一个有用的选项,具体差别不同如下图:

网友回复
如何破解绕开seedance2.0真人照片生成视频 限制?
python有哪些算法可以将视频中的每个帧图片去除指定区域水印合成新的视频?
iphone的激光雷达数据能否实时传输到three三维空间中?
豆包sora等ai视频生成大模型生成的视频水印如何去除?
python如何实现在电脑上拨号打电话给手机?
具身机器人与人形机器人区别?
nodejs如何将一个完整的js代码文件切割成不同的部分混淆后动态加载进入html运行?
为啥windows.onerror捕获js错误是这样的{"message":"Script error.","source":"","lineno":0,"colno":0,"stack":null,
2026年ai将全面接管编程?
WebMCP是干啥的?


