前端 JS 调用后端 API:3 种实用方法,轻松搞定前后端数据交互

前端 JS 调用后端 API:3 种实用方法,轻松搞定前后端数据交互

前端js调用后端API的三种方法

在 Web 开发中,前端与后端的协同是实现功能的核心环节,而前端通过 JavaScript 调用后端 API 接口,更是实现数据交互、完成业务逻辑的关键步骤。无论是用户登录时的信息验证,还是页面数据的动态加载,都离不开 API 调用。本文将详细介绍三种主流的前端 JS 调用后端 API 的方法,包括传统的 XMLHttpRequest、简化开发的 jQuery Ajax,以及现代项目常用的 axios 与 fetch,帮助开发者根据项目需求选择合适的方案。

下面主要介绍三种方法来实现前端js对后端API接口的调用:

方法一XMLHttpRequest

方法二jQuery和Ajax

方法三axiosfetch

XMLHttpRequest

XMLHttpRequest(简称 XHR)是浏览器提供的原生 API,也是前端调用后端 API 的 “鼻祖” 级方案。它不依赖任何第三方库,兼容性极强,能在几乎所有主流浏览器中运行,适合需要兼顾老旧浏览器的项目。

(1)创建XMLHttpRequest对象;

(2)建立http连接;

(3)发送请求;

(4)获取返回数据。

1.核心原理

通过创建 XMLHttpRequest 对象,配置请求方式(GET、POST 等)、请求 URL、是否异步等参数,然后发送请求;同时监听对象的状态变化,当请求完成且响应成功时,获取后端返回的数据并进行处理。

Post请求与Get请求主要有两点不同:
①post请求需要设置请求头的格式内容:xhr.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
②post请求参数放在send里面,即请求体

2.实现步骤与代码示例
// 1. 创建XMLHttpRequest对象const xhr =newXMLHttpRequest();// 2. 配置请求(请求方法、URL、是否异步)// GET请求:若需传参,可在URL后拼接(如"?id=1&name=test") xhr.open('GET','https://api.example.com/user/list',true);// 3. 设置请求头(可选,根据后端要求配置,如POST请求传JSON需设置)// 若为POST请求,需添加:xhr.setRequestHeader('Content-Type', 'application/json');// 4. 监听请求状态变化,处理响应 xhr.onreadystatechange=function(){// readyState=4表示请求已完成,status=200表示响应成功if(xhr.readyState ===4&& xhr.status ===200){// 解析后端返回的JSON数据(若返回非JSON则直接用xhr.responseText)const responseData =JSON.parse(xhr.responseText); console.log('请求成功,返回数据:', responseData);// 后续业务逻辑:如渲染页面数据}elseif(xhr.readyState ===4){// 请求完成但响应失败(如404、500错误) console.error('请求失败,状态码:', xhr.status);}};// 5. 发送请求(POST请求需传参,如xhr.send(JSON.stringify({id: 1}))) xhr.send();// 6. 处理网络错误 xhr.onerror=function(){ console.error('网络错误,请求无法发送');};
优缺点
  • 优点:原生 API,无依赖;兼容性好,支持老旧浏览器(如 IE6+)。
  • 缺点:代码繁琐,需手动处理请求状态、错误和数据解析;不支持 Promise,无法使用 async/await 简化异步代码。

jQuery Ajax

Query 是早期前端开发中常用的 JavaScript 库,它对 XMLHttpRequest 进行了封装,提供了简洁的 Ajax 方法,大幅减少了代码量,让 API 调用更高效。

核心原理

基于 XMLHttpRequest 封装,通过统一的.ajax()方法整合请求配置,内置了数据解析、错误处理等逻辑,同时提供.ajax()方法整合请求配置,内置了数据解析、错误处理等逻辑,同时提供.ajax()方法整合请求配置,内置了数据解析、错误处理等逻辑,同时提供.get()、$.post()等简化方法,降低开发成本。

2. 实现步骤与代码示例

jquary调用ajax方法:

​ 格式:$.ajax({});

​ 参数:

​ type:请求方式GET/POST

​ url:请求地址

​ async:是否异步,默认是true表示异步

​ data:发送到服务器的数据

​ dataType:预期服务器返回的数据类型

​ contentType:设置请求头

​ error:请求失败时调用此函数

get请求

<scriptsrc="https://code.jquery.com/jquery-3.6.4.min.js"></script>
$.ajax({ url:'https://api.example.com/user/add',// 请求URL type:'POST',// 请求方法(GET/POST/PUT/DELETE等) contentType:'application/json',// 发送数据的格式 data:JSON.stringify({// 发送给后端的数据 name:'张三', age:25}), dataType:'json',// 预期后端返回的数据格式(自动解析)success:function(response){// 请求成功回调 console.log('添加用户成功:', response);},error:function(xhr, status, error){// 请求失败回调 console.error('添加用户失败:', status, error);},complete:function(){// 请求完成(无论成功/失败)回调 console.log('请求结束');}});

(2)简化方法:.get()与.get()与.get()与.post()

适用于简单的 GET/POST 请求,无需复杂配置:

$.get(); 语法: $.get("请求地址","请求参数",function(形参){}); $.post(); 语法: $.post("请求地址","请求参数",function(形参){}); 
// GET请求:获取用户列表 $.get('https://api.example.com/user/list',{ page:1, size:10},function(response){ console.log('用户列表:', response);},'json').fail(function(error){ console.error('获取失败:', error);});// POST请求:添加用户 $.post('https://api.example.com/user/add',{ name:'李四', age:30},function(response){ console.log('添加成功:', response);},'json').fail(function(error){ console.error('添加失败:', error);});
3. 优缺点
  • 优点:代码简洁,封装完善;内置错误处理和数据解析;支持链式调用。
  • 缺点:需引入 jQuery 库,增加页面加载体积;现代单页应用(如 Vue、React 项目)中,通常不依赖 jQuery,易造成冗余。

axios fetch

随着前端技术的发展,Promise 成为异步编程的标准,axios 和 fetch 应运而生。它们基于 Promise,支持 async/await 语法,更符合现代前端开发习惯,是 Vue、React、Angular 等框架项目的首选。

1. axios:功能强大的 Promise 库

axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境,提供了拦截请求 / 响应、取消请求、自动转换 JSON 数据等丰富功能。

(1)使用步骤

首先需安装 axios(npm/yarn)或通过 CDN 引入:

# npm安装 npm install axios # 或CDN引入 <scriptsrc="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
// 1. 基础GET请求(带参数) axios.get('https://api.example.com/user/list',{ params:{ page:1, size:10}// 自动拼接为URL参数}).then(function(response){ console.log('请求成功:', response.data);// response.data直接是解析后的JSON}).catch(function(error){// 统一处理错误(包括网络错误、404、500等)if(error.response){// 有响应但状态码错误 console.error('响应错误,状态码:', error.response.status); console.error('错误数据:', error.response.data);}elseif(error.request){// 无响应(网络错误) console.error('网络错误,无响应:', error.request);}else{// 请求配置错误 console.error('请求配置错误:', error.message);}});// 2. 基础POST请求(传JSON数据) axios.post('https://api.example.com/user/add',{ name:'王五', age:28},{ headers:{'Content-Type':'application/json'}// 可选,默认已支持JSON}).then(response=>{ console.log('添加成功:', response.data);}).catch(error=>{ console.error('添加失败:', error);});// 3. 结合async/await(更简洁的异步写法)asyncfunctiongetUserList(){try{const response =await axios.get('https://api.example.com/user/list',{ params:{ page:1, size:10}}); console.log('用户列表:', response.data);return response.data;}catch(error){ console.error('获取失败:', error);throw error;// 抛出错误供上层处理}}// 调用函数getUserList();// 4. 高级功能:请求拦截器(添加Token等) axios.interceptors.request.use(config=>{// 给所有请求添加Tokenconst token = localStorage.getItem('token');if(token){ config.headers.Authorization =`Bearer ${token}`;}return config;},error=>{return Promise.reject(error);});
2. fetch调用API接口使用方法

fetch 是 ES6 引入的浏览器原生 API,基于 Promise,无需依赖第三方库,设计更简洁,是现代浏览器的原生选择。但需注意其部分 “特殊行为”(如不默认拦截 HTTP 错误状态码)。

// 1. 基础GET请求fetch('https://api.example.com/user/list?page=1&size=10').then(function(response){// 注意:fetch仅在网络错误时 reject,404、500等状态码仍会 resolveif(!response.ok){// 手动处理HTTP错误thrownewError(`请求失败,状态码:${response.status}`);}// 解析响应数据(支持json()、text()、blob()等)return response.json();}).then(function(data){ console.log('用户列表:', data);}).catch(function(error){ console.error('请求错误:', error.message);});// 2. 基础POST请求(传JSON数据)fetch('https://api.example.com/user/add',{ method:'POST',// 请求方法 headers:{'Content-Type':'application/json'// 数据格式}, body:JSON.stringify({ name:'赵六', age:32}),// 发送的数据(需转为字符串) credentials:'include'// 跨域时携带Cookie(可选)}).then(response=>{if(!response.ok){thrownewError(`状态码错误:${response.status}`);}return response.json();}).then(data=>{ console.log('添加成功:', data);}).catch(error=>{ console.error('添加失败:', error);});// 3. 结合async/awaitasyncfunctionaddUser(){try{const response =awaitfetch('https://api.example.com/user/add',{ method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify({ name:'孙七', age:26})});if(!response.ok){thrownewError(`请求失败:${response.status}`);}const data =await response.json(); console.log('添加成功:', data);return data;}catch(error){ console.error('错误:', error);throw error;}}// 调用函数addUser();

fetch 的 “特殊注意点”

  • 不默认拦截 HTTP 错误:即使状态码为 404、500,fetch 仍会进入then回调,需通过response.ok(true表示 200-299 状态码)手动判断。
  • 不自动携带 Cookie:跨域请求时需添加credentials: 'include’配置,同域请求需添加credentials: ‘same-origin’。

无内置超时处理:需手动通过Promise.race()实现超时控制。

3.axios 与 fetch 的优缺点对比

特性axiosfetch依赖需安装第三方库浏览器原生,无依赖HTTP 错误处理自动拦截(404、500 等会 reject)需手动通过 response.ok 判断数据解析自动解析 JSON 数据需手动调用 response.json ()超时控制内置 timeout 配置需手动实现拦截器支持请求 / 响应拦截器需手动封装兼容性支持 IE8+(需配合 es6-promise)仅支持现代浏览器(IE 不支持)

总结与选择建议

三种前端 JS 调用后端 API 的方法各有优劣,选择时需结合项目场景、浏览器兼容性要求和开发效率:

  • 若需兼容老旧浏览器(如 IE6+),或项目无第三方库依赖,XMLHttpRequest是唯一选择;
  • 若项目已引入 jQuery,或需快速实现简单 API 调用,jQuery Ajax能简化代码;
  • 若为现代单页应用(Vue/React/Angular),或需丰富功能(如拦截器、超时控制),axios是最优解;
  • 若项目追求 “零依赖” 且仅支持现代浏览器,fetch可作为轻量选择(需处理其特殊行为)。

前端技术不断迭代,但 API 调用的核心逻辑始终是 “发送请求 - 处理响应 - 处理错误”。掌握这三种方法,能让你在不同项目中灵活应对前后端交互需求。你在实际开发中更倾向于使用哪种方法?欢迎在评论区分享你的经验!

Read more

OpenClaw 钉钉群聊多机器人配置完全指南

OpenClaw 钉钉群聊多机器人配置完全指南

OpenClaw 钉钉群聊多机器人配置完全指南 在团队协作中,配置多个专用机器人可以显著提升工作效率——不同的机器人可以分别负责写作、编码、数据分析等不同任务。本文将详细介绍如何在使用OpenClaw的钉钉群聊中配置多个任务机器人,并进一步讲解如何为每个机器人赋予独特的性格和工作规范。 一、钉钉端配置 首先,我们需要在钉钉开放平台创建多个任务机器人。 1.1 创建机器人 1. 按照上述步骤,根据实际需求创建多个机器人。 机器人创建完成后,务必记下 Client ID 和 Client Secret,这些信息后续配置会用到。 访问 钉钉开发者平台,点击立即创建按钮创建任务机器人。 二、OpenClaw端配置 完成钉钉端的配置后,接下来我们在OpenClaw中进行相应的设置(默认已装过钉钉插件)。 # 安装钉钉渠道插件 openclaw plugins install @dingtalk-real-ai/dingtalk-connector # 重启 gateway openclaw gateway restart 2.1 添加 Agent

乐言科技VS店小蜜VS晓多VS智齿科技VS网易七鱼:2025电商客服机器人实测

乐言科技VS店小蜜VS晓多VS智齿科技VS网易七鱼:2025电商客服机器人实测

2025 年中国智能客服机器人市场规模已达 150 亿元,其中电商领域占比超 30%,成为商家降本增效的核心工具。那么商家该如何选择适合自己的服务商呢? 为了给商家朋友们解疑答惑,我们选取阿里系单店、多平台连锁、垂直品类专营店、跨境电商四类商家场景,对五家市场主流品牌开展实测,聚焦响应效率、意图识别、场景覆盖、多平台适配四大核心维度,全程只谈功能差异,不做主观褒贬。 一、实测维度一:响应效率 + 多平台管理 运营成本差异对比 * 乐言科技:多平台聚合能力领跑行业。其电商智能客服机器人 “全渠道聚合应答” 能够将10+主流电商平台咨询消息统一接入,无需切换后台即可回复买家。日常时段各平台响应速度稳定在 0.8-1 秒,各平台速度差异不超 0.2 秒。核心优势在于 “跨平台话术一键同步”,修改一条售后话术可同步至所有渠道,比单独设置效率提升 60%。 * 阿里店小蜜:阿里生态内效率天花板。淘宝、天猫店铺日常响应 0.

MK米客方德SD NAND:无人机存储的高效解决方案

MK米客方德SD NAND:无人机存储的高效解决方案

在无人机技术迅猛发展的当下,飞控系统的数据记录对于飞行性能剖析、故障排查以及飞行安全保障极为关键。以往,SD 卡是飞控 LOG 记录常见的存储介质,但随着技术的革新,新的存储方案不断涌现。本文聚焦于以 ESP32 芯片为主控制器的无人机,创新性采用 SD NAND 芯片 MKDV32GCL-STPA 芯片进行 SD NAND 存储,测试其在飞控 LOG 记录功能中的表现。 米客方德 SD NAND 芯片特性 免驱动优势:与普通存储设备不同,在该应用场景下,SD NAND 无需编写复杂的驱动程序。这极大地简化了开发流程,缩短了开发周期,减少了潜在的驱动兼容性问题,让开发者能够更专注于实现核心功能。 自带坏块管理功能:存储设备出现坏块难以避免,而 MKDV32GCL - STPA 芯片自带的坏块管理机制可自动检测并处理坏块。这确保了数据存储的可靠性,避免因坏块导致的数据丢失或错误写入,提升了整个存储系统的稳定性。 尺寸小巧与强兼容性:

面向无人机和智能手机的YOLOv8模型改进实战—棉叶病虫害多尺度目标检测

面向无人机和智能手机的YOLOv8模型改进实战—棉叶病虫害多尺度目标检测

一、引言        YOLO(You Only Look Once)作为一种非常流行的目标检测算法,以其高效和准确性而闻名。YOLOv8作为这一系列算法较新颖的版本,相较于其前身在准确性、速度和模型大小方面都有所改进。博主将分享1篇发表在《Industrial Crops and Products》(中科院1区TOP)的“CPD-YOLO: A cross-platform detection method for cotton pests and diseases using UAV and smartphone imaging”,说明YOLOv8模型在跨平台(无人机+手机)场景下的棉花病虫害多尺度目标检测中的应用。主要改进点如下: (1)特征融合改善:构建Bi-FPN +RepTransformer网络,实现多尺度特征的高效融合与推理加速。 (2)检测头增加:设计4头动态检测网络,赋予模型多维动态感知能力。 (3)损失函数优化: