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

前端核心知识:Vue 3 编程的 10 个实用技巧

前端核心知识:Vue 3 编程的 10 个实用技巧

文章目录 * 1. **使用 `ref` 和 `reactive` 管理响应式数据** * 原理解析 * 代码示例 * 注意事项 * 2. **组合式 API(Composition API)** * 原理解析 * 代码示例 * 优势 * 3. **使用 `watch` 和 `watchEffect` 监听数据变化** * 原理解析 * 代码示例 * 注意事项 * 4. **使用 `provide` 和 `inject` 实现跨组件通信** * 原理解析 * 代码示例 * 优势 * 5. **使用 `Teleport` 实现组件挂载到任意位置** * 原理解析 * 代码示例 * 优势 * 6. **使用 `Suspense` 处理异步组件加载** * 原理解析 * 代码示例 * 优势

By Ne0inhk
1分钟,图文并茂手把手教你用Trae AI将你的设计稿自动生成前端代码 One-Minute Guide with Visuals: Turn Design Mockups into Code wit

1分钟,图文并茂手把手教你用Trae AI将你的设计稿自动生成前端代码 One-Minute Guide with Visuals: Turn Design Mockups into Code wit

1分钟,图文并茂手把手教你用Trae AI将你的设计稿自动生成前端代码 One-Minute Guide with Visuals: Turn Design Mockups into Code with Trae AI * 准备工作: * 实操 * 第1步:上传设计图 * 第2步:下达指令 * 指令模板 * 具体示例 * 补充信息(让AI更准确) * 第3步:AI自动解析 * 授权AI自动执行命令,创建编写代码 * 第4步:AI自动生成高质量代码 * 第5步:实时预览与调整 * 总结 * Preparation: * Practical Steps * Step 1: Upload Design Mockup * Step 2: Give Instructions * Instruction Template * Specific Example

By Ne0inhk

前端数据库 IndexedDB 详解:构建强大的离线Web应用

前端数据库 IndexedDB 详解:构建强大的离线Web应用 * 引言:为什么需要前端数据库? * IndexedDB核心概念解析 * 1. 数据库(Database) * 2. 对象存储(Object Store) * 3. 索引(Index) * 4. 事务(Transaction) * 5. 游标(Cursor) * 完整代码示例:实现一个联系人管理器 * 1. 初始化数据库 * 2. 添加联系人 * 3. 查询联系人 * 通过ID查询 * 通过索引查询 * 4. 更新联系人 * 5. 删除联系人 * 6. 高级查询:使用游标和范围 * IndexedDB最佳实践 * IndexedDB的浏览器支持情况 * 使用第三方库简化开发 * 常见应用场景 * 总结 引言:为什么需要前端数据库? 在现代Web开发中,我们经常需要处理大量结构化数据。传统的localStorage和sessionStorage虽然简单易用,

By Ne0inhk

RTX3090即可运行,Hunyuan-MT-7B-WEBUI显存优化做得真好

RTX3090即可运行,Hunyuan-MT-7B-WEBUI显存优化做得真好 在大模型时代,性能与可用性之间的鸿沟始终存在。许多开源模型虽然参数规模庞大、理论效果优异,但对硬件要求极高,往往需要A100级别的专业GPU才能运行,普通开发者和中小企业难以负担。然而,腾讯推出的 Hunyuan-MT-7B-WEBUI 却打破了这一壁垒——它不仅支持38种语言互译(含5种民汉翻译),更通过精妙的显存优化设计,实现了在单张RTX 3090上流畅推理的目标。 这不仅是技术能力的体现,更是工程落地思维的胜利:让高性能翻译模型真正走进实验室、办公室乃至教室。 1. 模型背景与核心优势 1.1 专为翻译而生的7B级模型 Hunyuan-MT-7B并非通用大模型微调而来,而是从架构设计到训练数据都专注于多语言机器翻译任务。其70亿参数规模经过精心权衡,在保证翻译质量的同时显著降低了部署门槛。 该模型在多个权威评测中表现突出: * 在WMT25比赛中,于30个语向测试中排名第一; * 在低资源语言基准Flores-200上,汉语与藏语、维吾尔语等少数民族语言互译准确率领先同类模型;

By Ne0inhk