首页 > 其他分享 >前端请求之ajax、axios、fetch

前端请求之ajax、axios、fetch

时间:2024-11-19 19:49:51浏览次数:3  
标签:jQuery axios 请求 支持 response ajax error data fetch

Ajax、Axios、Fetch 的详细讲解和比较

本人在学习js中一直很对请求的方式不是很理解,因此也做了一篇请求的总结,希望对大家有帮助

在现代 Web 开发中,进行 HTTP 网络请求的三种常见方式分别是 Ajax(基于 jQuery)、Axios(第三方库)和 Fetch(原生 API)。以下是对它们的详细分析,结合代码实现和各自的优缺点。


1. Ajax

实现代码

$.ajax({
  type: "POST",
  url: "/api/data",
  data: { key: "value" },
  dataType: "json",
  success: function (response) {
    console.log("Success:", response);
  },
  error: function (err) {
    console.log("Error:", err);
  },
});

优点

  1. 成熟性
    • 基于 jQuery,使用方便,支持大部分主流浏览器。
  2. 功能丰富
    • 支持进度监控、错误处理、同步/异步配置等功能。
  3. 生态广泛
    • jQuery 社区庞大,配套文档和插件丰富。

缺点

  1. 重量级
    • 引入 jQuery 仅为使用 Ajax 显得冗余,尤其在小型项目中不合适。
  2. 基于 XHR
    • XHR(XMLHttpRequest)接口复杂,架构较为笨重,操作繁琐。
  3. 不符合现代开发趋势
    • 随着 MVVM 框架(如 Vue、React)的流行,jQuery 的使用逐渐减少。

2. Axios

实现代码

axios({
  method: "post",
  url: "/api/data",
  data: {
    key: "value",
  },
})
  .then((response) => {
    console.log("Success:", response.data);
  })
  .catch((error) => {
    console.error("Error:", error);
  });

优点

  1. 简洁性
    • 语法清晰,使用 Promise 方式处理异步请求,代码更加直观。
  2. 功能丰富
    • 支持拦截器(Interceptor)对请求和响应进行预处理。
    • 内置 JSON 数据转换功能,无需手动解析。
    • 支持取消请求、超时设置等高级功能。
  3. 多环境支持
    • 在浏览器和 Node.js 环境均可使用。
  4. 默认携带 Cookie
    • 在跨域请求中自动附带 Cookie,便于处理身份验证。

缺点

  1. 额外依赖
    • 需要引入第三方库,增大项目体积。
  2. 现代性限制
    • 对不支持 ES6 的旧浏览器环境,需要额外的 Polyfill(如 Babel)支持。

3. Fetch

实现代码

try {
  const response = await fetch("/api/data", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ key: "value" }),
  });
  if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
  const data = await response.json();
  console.log("Success:", data);
} catch (error) {
  console.error("Error:", error);
}

优点

  1. 原生支持
    • 不依赖任何库,浏览器原生提供,支持现代语法(如 Promiseasync/await)。
  2. 链式调用
    • 利用 Promise,可以方便地实现链式操作,异步逻辑更清晰。
  3. 跨平台性
    • 内置于浏览器,无需安装额外库,体积更轻。

缺点

  1. 功能不完整
    • 不支持请求拦截、取消请求、超时设置等功能,需要手动封装。
  2. 错误处理复杂
    • 网络错误会触发 catch,但 HTTP 错误(如 400、500)不会抛出异常,需要手动检查 response.ok
  3. Cookie 处理需配置
    • 默认不会携带 Cookie,需要通过 { credentials: "include" } 显式开启。
  4. 进度监控缺失
    • 无法直接监控上传和下载进度。

功能对比总结

特性AjaxAxiosFetch
语法简洁性较繁琐简洁简洁
兼容性IE9+IE9+IE10+
错误处理回调函数Promise 支持,较友好手动处理 HTTP 状态码
拦截器支持请求和响应均支持
请求取消支持需要手动封装
JSON 自动处理自动需要手动解析
携带 Cookie默认支持默认支持手动配置
进度监控支持支持不支持
体积影响依赖 jQuery,较大额外依赖 axios,适中原生,最轻

适用场景分析

  1. 使用 Ajax 的场景

    • 需要兼容性强,且已有 jQuery 作为基础框架的项目。
    • 小型项目中,不依赖现代化开发工具链。
  2. 使用 Axios 的场景

    • 使用现代框架(如 Vue、React)的项目。
    • 需要频繁处理拦截器、取消请求或高级配置的业务场景。
  3. 使用 Fetch 的场景

    • 现代项目中,优先考虑轻量化和直接使用浏览器原生能力的场景。
    • 不需要复杂功能,仅用于简单的网络请求。

结论

  • Ajax 是旧时代的解决方案,适用于传统项目,但在现代开发中逐渐被替代。
  • Axios 功能强大且易用,是现代框架开发中的首选工具。
  • Fetch 简单轻便,但功能有限,适合对请求管理需求较低的场景。

标签:jQuery,axios,请求,支持,response,ajax,error,data,fetch
From: https://blog.csdn.net/JimmyHeat/article/details/143894030

相关文章

  • ThinkPHP中使用ajax接收json数据的方法
    在ThinkPHP框架中,使用AJAX接收JSON数据通常涉及前端和后端的交互。前端通过AJAX发送JSON数据到后端,后端控制器接收并处理这些数据,然后可能返回一些响应数据。以下是使用ThinkPHP接收AJAX发送的JSON数据的基本步骤:前端(JavaScript/AJAX)准备JSON数据:你需要将要发送的数据转换......
  • 使用 Axios 拦截器优化 HTTP 请求与响应的实践
    目录前言1.Axios简介与拦截器概念1.1Axios的特点1.2什么是拦截器2.请求拦截器的应用与实践2.1请求拦截器的作用2.2请求拦截器实现3.响应拦截器的应用与实践3.1响应拦截器的作用3.2响应拦截器实现4.综合实例:一个完整的Axios配置5.使用拦截器的好处与注......
  • axios的post请求,数据为什么要用qs处理?什么时候不用?
    在使用Axios进行HTTP请求时,特别是在进行POST请求时,是否需要对数据进行qs(Querystring)处理主要取决于后端API接收数据的格式(Content-Type)以及你的具体需求。为什么有时需要用qs处理数据?后端期望application/x-www-form-urlencoded格式的数据:如果后端API设计为接收application/......
  • Axios 拦截器示例(JWT 登录与自动刷新)
    1.安装axios首先,确保你已经安装了axios:npminstallaxios2.设置Axios拦截器importaxiosfrom'axios';//创建一个axios实例constaxiosInstance=axios.create({baseURL:'http://localhost:8000/',//后端API地址timeout:10000,//设置超时时间......
  • Ajax笔记
    自己学习的随手记,不提供专业性总结与知识传授哦,路过的看一乐呵~ 前言Ajax简介 Ajax(Asynchronous  JavaScript  andXML)    异步的JS和XML通过Ajax可以在浏览器中向服务器发送异步请求,最大的优势        可以在网页不刷新的情况下,向网页发送ht......
  • GoldenGate抽取进程延迟严重,论FETCHOPTIONS NOUSESNAPSHOT的重要性
    1、案例概述同事新搭建的一套GoldenGate环境,刚刚搭建时,Extract抽取进程就已经出现延迟现象,当时想着可能很快就能追平,所以最开始也没当回事。结果两天时间,延迟现象没有缓解,已经累积延迟30多个小时。通过info或者stats等命令查看进程状态信息,发现该Extract抽取进程仍然在工作,只......
  • ajax 调用
    一、Post$("#btn30").on('click',function(){$.ajax({type:"post",contentType:"application/json",dataType:"json",url:"https://localhost/api/app/abc",......
  • el表达式+axios+vue -2024/11/13
    一个好看的界面<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>首页</title></head><body><divid="app"><el-menu:default-active=......
  • VUE 封装axios
    axios官方介绍:https://www.axios-http.cn/docs/intro node.js安装:npminstallaxios封装一个配置文件constinstance=axios.create({baseURL:'https://some-domain.com/api/',timeout:1000,headers:{'X-Custom-Header':'foobar'}});......
  • 如何在 Spring MVC 中处理 AJAX 请求:从表单数据到文件上传的全流程
    个人名片......