当前位置: 首页 > news >正文

JavaScriptAJAX异步请求:XHR、Fetch与Axios对比

在 JavaScript 中,AJAX 是通过异步请求来与服务器交互并更新页面内容的一种技术。常见的方式有使用 XMLHttpRequest(即 xhr)、Fetch APIAxios。这三种方法各自有不同的特点和适用场景。

1. XMLHttpRequest(XHR)

XMLHttpRequest 是最早的 AJAX 实现方法,在浏览器中发送 HTTP 请求并处理响应。尽管 XMLHttpRequest 现在已经被 Fetch APIAxios 替代,但它仍然是很多遗留项目中使用的标准方法。

基本用法
let xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts', true);  // 设置请求方法和URL
xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {  // 请求完成并成功console.log(JSON.parse(xhr.responseText));  // 解析并处理响应数据}
};
xhr.send();  // 发送请求
优缺点
  • 优点:原生浏览器支持,无需任何外部库。

  • 缺点

    • 语法较为繁琐,尤其是处理响应时。
    • 使用回调函数,容易出现回调地狱。
    • 不支持 Promise,与现代 JavaScript 不太兼容。

2. Fetch API

Fetch API 是现代浏览器中提供的一种更加简洁的方式来处理 HTTP 请求,它基于 Promise,使得异步操作更加清晰易懂。

基本用法
fetch('https://jsonplaceholder.typicode.com/posts').then(response => response.json())  // 解析响应数据为 JSON.then(data => console.log(data))    // 处理响应数据.catch(error => console.log('请求失败', error));  // 错误处理
优缺点
  • 优点

    • 更简洁和现代,基于 Promise,支持 .then().catch()
    • 更易于处理异步操作,避免了回调地狱。
    • 支持 async/await,使得异步代码更加清晰。
  • 缺点

    • 不支持较老的浏览器(例如 Internet Explorer),需要通过 Polyfill 来实现兼容性。
    • 请求失败时,fetch 不会抛出错误,除非网络连接失败。需要手动检查响应的 status

3. Axios

Axios 是一个流行的第三方库,用于发起 HTTP 请求,基于 Promise。它在功能和使用上提供了更多的灵活性和方便性。Axios 适合于需要高度定制的 HTTP 请求。

基本用法
axios.get('https://jsonplaceholder.typicode.com/posts').then(response => console.log(response.data))  // 处理返回的数据.catch(error => console.log('请求失败', error));  // 错误处理
优缺点
  • 优点

    • 支持 Promise,支持 async/await
    • 自动转换 JSON 响应为对象。
    • 提供了取消请求的功能。
    • 更好的错误处理:Axios 会在响应状态码不是 2xx 时抛出错误,可以直接通过 .catch() 捕获。
    • 支持请求和响应拦截器,可以更灵活地处理请求。
  • 缺点

    • 需要引入额外的库(即 Axios),增加了额外的依赖。

比较总结

特性XMLHttpRequestFetch APIAxios
支持性原生支持原生支持(部分浏览器需要 polyfill)需要引入第三方库
API风格回调函数Promise,支持 async/awaitPromise,支持 async/await
响应处理必须手动解析响应自动解析 JSON(需要手动处理其他类型)自动解析 JSON
错误处理需要手动检查 status不会抛出错误,需手动检查 status自动抛出错误(2xx以外)
功能基本的请求功能简单易用,适合大多数情况更强大,支持拦截器、取消请求等
兼容性最广泛的兼容性新浏览器支持,旧浏览器需 polyfill需要引入库,兼容大部分浏览器

示例:使用 async/await 简化异步请求

Fetch API 示例:
async function getPosts() {try {let response = await fetch('https://jsonplaceholder.typicode.com/posts');if (!response.ok) throw new Error('请求失败');let data = await response.json();console.log(data);} catch (error) {console.error('请求错误:', error);}
}getPosts();
Axios 示例:
async function getPosts() {try {let response = await axios.get('https://jsonplaceholder.typicode.com/posts');console.log(response.data);} catch (error) {console.error('请求错误:', error);}
}getPosts();

总结:

  • XMLHttpRequest 适合需要浏览器兼容性的旧版代码,但现代开发中已不常用。
  • Fetch API 是现代浏览器推荐的标准方法,简洁且支持 Promise,适合处理大部分异步请求。
  • Axios 是一个功能更强大的库,提供了更多的功能(例如请求拦截器、取消请求等),适用于复杂的 HTTP 请求需求。

如果你需要更简单和现代的语法,Fetch APIAxios 都是不错的选择,而 Axios 则提供了更多高级功能。

http://www.lryc.cn/news/606616.html

相关文章:

  • Trice移植(Start with Trice)
  • 【iOS】retain/release底层实现原理
  • CMake set_source_files_properties使用解析
  • 15. 若依框架的Security Config
  • 微服务消息队列之RabbitMQ,深入了解
  • Docker状况监控
  • 加密与安全
  • Idea集成Jenkins Control插件,在IDEA中触发Jenkins中项目的构建
  • LLM Prompt与开源模型资源(2)提示工程关键技术
  • GaussDB 数据库设计规范
  • JavaScript 高效入门指南:从基础到实战(VSCode 版)
  • 【03】海康MVS V4.3.0 ——安装教程、查看示例、库、头文件、开发指南
  • 应用app的服务器如何增加高并发
  • 解读LISA:通过大型语言模型实现推理分割
  • 【无标题】严谨推导第一代宇宙的创生机制,避免无限回溯问题。
  • alaxea机器人由星海图人工智能科技有限公司研发的高性能仿人形机器人
  • 渗透测试常用指令
  • SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:日志管理(四)集成Spring Security
  • 如何将消息转移到新 iPhone
  • 1688商品评论API接口逆向分析与数据采集
  • 视频质量检测中卡顿识别准确率↑32%:陌讯多模态评估框架实战解析
  • 2025年文生图模型stable diffusion v3.5 large的全维度深度解析
  • 嵌入式系统中常用通信协议
  • RAGFlow Agent 知识检索节点源码解析:从粗排到精排的完整流程
  • 电脑的时间同步电池坏掉了,每次开机都要调整时间
  • 江协科技STM32 11-4 SPI通信外设
  • 生物医药研究数据分析工具测评:衍因科技如何重塑科研范式?
  • Git Pull 时遇到 Apply 和 Abort 选项?详解它们的含义与应对策略
  • LeetCode 面试经典 150_数组/字符串_买卖股票的最佳时机(7_121_C++_简单)(贪心)
  • 《黑马笔记》 --- C++ 提高编程