简介:本文详细讲解如何在HTML中通过Axios库调用API接口,涵盖基础配置、请求发送、错误处理及实际案例,帮助开发者快速掌握前端数据交互的核心技能。
在Web开发中,通过HTML页面直接调用API接口已成为现代前端开发的核心能力。Axios作为基于Promise的HTTP客户端,凭借其简洁的API设计、浏览器兼容性和丰富的功能(如请求/响应拦截、自动JSON转换等),成为HTML中调用API的首选工具。本文将系统阐述如何在HTML环境中使用Axios实现API调用,覆盖基础配置、请求发送、错误处理及实际案例,为开发者提供可落地的技术方案。
Axios之所以成为HTML调用API的主流选择,源于其三大核心优势:
.then()和.catch()链式调用简化代码结构,避免回调地狱。典型应用场景包括:
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
优势:无需构建工具,直接通过<script>标签引入,适合原型开发或简单页面。
npm init -ynpm install axios
import axios from 'axios';
从Axios GitHub仓库下载axios.min.js,保存至项目目录后通过相对路径引入:
<script src="./js/axios.min.js"></script>
axios.get('https://api.example.com/users').then(response => {console.log('用户数据:', response.data);// 渲染数据到页面document.getElementById('user-list').innerHTML =response.data.map(user => `<li>${user.name}</li>`).join('');}).catch(error => {console.error('请求失败:', error.message);alert('获取用户数据失败,请稍后重试');});
关键点:
response.data).then()处理成功响应,.catch()捕获错误message(错误描述)和response(服务器响应)
const formData = {username: document.getElementById('username').value,password: document.getElementById('password').value};axios.post('https://api.example.com/login', formData).then(response => {if (response.data.success) {window.location.href = '/dashboard';} else {alert(response.data.message || '登录失败');}}).catch(error => {if (error.response) {// 服务器返回了错误状态码(如401未授权)console.error('服务器错误:', error.response.status);} else {// 网络错误或请求未到达服务器console.error('网络错误:', error.message);}});
参数说明:
headers配置自定义请求头:
axios.post(url, data, {headers: { 'Authorization': 'Bearer token123' }});
all方法)
function fetchData() {return axios.all([axios.get('https://api.example.com/users'),axios.get('https://api.example.com/products')]).then(axios.spread((usersResponse, productsResponse) => {// 两个请求均完成后执行console.log('用户数据:', usersResponse.data);console.log('产品数据:', productsResponse.data);}));}fetchData().catch(error => {console.error('并发请求失败:', error);});
// 创建自定义Axios实例const apiClient = axios.create({baseURL: 'https://api.example.com',timeout: 5000, // 请求超时时间headers: { 'X-Custom-Header': 'foobar' }});// 使用实例发送请求apiClient.get('/users').then(...);
优势:
// 添加请求拦截器axios.interceptors.request.use(config => {const token = localStorage.getItem('auth_token');if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;}, error => {return Promise.reject(error);});// 添加响应拦截器axios.interceptors.response.use(response => {// 对响应数据做处理(如统一错误码转换)if (response.data.code === 401) {window.location.href = '/login';return Promise.reject('未授权');}return response;}, error => {return Promise.reject(error);});
error.message(如”Network Error”)error.response.status判断状态码error.response.data中的自定义错误码timeout并在拦截器中统一处理
const CancelToken = axios.CancelToken;let cancel;document.getElementById('submit-btn').addEventListener('click', () => {// 取消之前的请求if (cancel) cancel();axios.post('/api/submit', data, {cancelToken: new CancelToken(function executor(c) {cancel = c;})}).then(...);});
<form id="login-form"><input type="text" id="username" placeholder="用户名" required><input type="password" id="password" placeholder="密码" required><button type="submit">登录</button><div id="error-message" class="hidden"></div></form>
document.getElementById('login-form').addEventListener('submit', async (e) => {e.preventDefault();const formData = {username: document.getElementById('username').value,password: document.getElementById('password').value};try {const response = await axios.post('https://api.example.com/auth/login', formData);if (response.data.token) {localStorage.setItem('auth_token', response.data.token);window.location.href = '/dashboard';}} catch (error) {const errorMsg = document.getElementById('error-message');errorMsg.textContent = error.response?.data?.message || '登录失败,请重试';errorMsg.classList.remove('hidden');}});
跨域问题:
Access-Control-Allow-Origin: *)devServer.proxy)CSRF防护:
axios.interceptors.request.use(config => {config.headers['X-CSRF-Token'] = document.querySelector('meta[name="csrf-token"]').content;return config;});
性能优化:
axios.all)axios.CancelToken取消重复请求Axios为HTML调用API接口提供了高效、灵活的解决方案。开发者应掌握:
进阶方向:
通过系统掌握Axios的核心功能与最佳实践,开发者能够显著提升前端与后端API交互的效率与可靠性,为构建现代化Web应用奠定坚实基础。