前端 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

JavaScript 中 var、let、const 的核心区别与实战应用

JavaScript 中 var、let、const 的核心区别与实战应用

要理解 const、var、let 的区别,我们可以从 作用域、变量提升、可重复声明、可修改性 这几个核心维度展开,这些也是新手最容易混淆的点。 一、核心概念铺垫 首先明确两个基础概念,能帮你更好理解区别: * 函数作用域:变量只在声明它的函数内部可访问(var 是函数作用域)。 * 块级作用域:变量只在声明它的 {} 内部可访问(let/const 是块级作用域,{} 包括 if/for/while/ 普通代码块)。 * 变量提升:JS 引擎在执行代码前,会把变量声明 “提升” 到当前作用域顶部(但赋值不会提升)。 二、逐个拆解 + 对比 1. var(ES5 语法) var 是 ES5 中声明变量的方式,特性如下:

By Ne0inhk
从 XMLHttpRequest 到 Fetch API:现代前端网络请求的演进与迁移指南

从 XMLHttpRequest 到 Fetch API:现代前端网络请求的演进与迁移指南

🧑 博主简介:ZEEKLOG博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可关注公众号 “ 心海云图 ” 微信小程序搜索“历代文学”)总架构师,16年工作经验,精通Java编程,高并发设计,分布式系统架构设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。 🤝商务合作:请搜索或扫码关注微信公众号 “ 心海云图 ” 从 XMLHttpRequest 到 Fetch API:现代前端网络请求的演进与迁移指南 引言:为什么我们需要新的网络请求方案? 在前端开发领域,XMLHttpRequest (XHR) 长期统治着浏览器端的网络请求。然而,随着 Web

By Ne0inhk
唤醒80年代记忆:基于百度地图的一次老式天气预报的WebGIS构建之旅

唤醒80年代记忆:基于百度地图的一次老式天气预报的WebGIS构建之旅

目录 一、省会城市信息构建 1、省会城市空间查询 2、Java后台查询 二、Java省会城市天气查询 1、与百度开放平台集成天气 2、响应对象属性介绍 3、省会天气实况展示 三、WebGIS应用构建 1、背景音乐集成 2、城市标记及天气展示 3、城市轮播 4、成果展示 四、总结 前言         在数字技术飞速发展的今天,我们常常沉浸于各种高科技带来的便捷与震撼之中,却容易忽视那些曾经陪伴我们成长、承载着时代记忆的旧事物。80年代的天气预报,便是这样一份珍贵的文化遗产。它以简洁而质朴的方式,传递着天气信息,也传递着那个时代的气息。那种对自然的敬畏、对信息的渴望,以及一家人共同分享的温馨氛围,都深深烙印在我们的记忆中。然而,随着时间的推移,天气预报的形式已经发生了翻天覆地的变化。高清的画面、精准的数据、个性化的推送……这些现代技术带来的便利固然令人欣喜,但也在一定程度上让我们失去了那份对天气预报本身的纯粹情感。于是,

By Ne0inhk
前端异常捕获与统一格式化:从 console.log(error) 到服务端上报

前端异常捕获与统一格式化:从 console.log(error) 到服务端上报

🧑 博主简介:ZEEKLOG博客专家,「历代文学网」(公益文学网,PC端可以访问:https://lidaiwenxue.com/#/?__c=1000,移动端可关注公众号 “ 心海云图 ” 微信小程序搜索“历代文学”)总架构师,首席架构师,也是联合创始人!16年工作经验,精通Java编程,高并发设计,分布式系统架构设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。 🤝商务合作:请搜索或扫码关注微信公众号 “ 心海云图 ” 前端异常捕获与统一格式化:从 console.log(error) 到服务端上报 引言 在前端开发中,异常监控是保证应用稳定性的重要一环。当用户遇到页面白屏、功能不可用等问题时,如果能及时收集到详细的错误信息(包括堆栈、

By Ne0inhk