前端HTML编程6:ES6与前后端交互

ES6 基础与前后端交互完全指南(超详细入门版)

作者 :燐妤
来源 :CSDN
原文链接点击查看

目录

[ES6 基础与前后端交互完全指南(超详细入门版)](#ES6 基础与前后端交互完全指南(超详细入门版))

前言

一、学习目标与重点

学习目标

重难点

二、情景导入

三、箭头函数、模板字符串、解构赋值

[3.1 箭头函数](#3.1 箭头函数)

[3.2 模板字符串](#3.2 模板字符串)

[3.3 解构赋值](#3.3 解构赋值)

[3.4 展开运算符](#3.4 展开运算符)

[3.5 练习示例](#3.5 练习示例)

[四、Promise 基础与异步操作](#四、Promise 基础与异步操作)

核心概念

[Promise 常用方法](#Promise 常用方法)

练习示例

[五、async/await 语法](#五、async/await 语法)

[六、ES6 模块化](#六、ES6 模块化)

导出

导入

动态导入

[七、fetch/axios 请求基础](#七、fetch/axios 请求基础)

fetch

axios

[八、综合项目实战------AI 对话应用](#八、综合项目实战——AI 对话应用)

项目功能

流程图

核心代码示例

九、总结


前言

ES6(ECMAScript 2015)是 JavaScript 的一次重要更新,带来了大量新特性,使 JS 更适合工程化开发。与此同时,掌握前后端交互也是现代前端开发的必备技能。

本章将从 ES6 核心语法开始,讲解 Promise、async/await、模块化、fetch/axios,并最终实现一个 AI 对话应用 的完整前后端示例。


一、学习目标与重点

学习目标

  • 掌握箭头函数、模板字符串、解构赋值等 ES6 核心语法
  • 理解 Promise,能够处理异步操作
  • 掌握 async/await 语法
  • 理解 ES6 模块化(import/export)
  • 掌握 fetch/axios 进行 HTTP 请求
  • 能够实现前后端数据联动的完整流程

重难点

  • 重点:Promise 链式调用、async/await 错误处理、fetch API 使用
  • 难点:Promise 执行时机、async 函数返回值、跨域 CORS 概念

二、情景导入

场景示例:开发一个 AI 平台前端页面,需要与 FastAPI 后端交互,实现数据获取、消息发送、结果渲染。同时需要处理异步请求状态(加载中、成功、失败),并使用 ES6+ 语法提高代码可读性和维护性。


三、箭头函数、模板字符串、解构赋值

3.1 箭头函数

javascript 复制代码
// 传统函数
function add(a, b) {
    return a + b;
}

// 箭头函数
const add = (a, b) => a + b;

// 单个参数可省略括号
const square = x => x * x;

// 多行需加大括号和 return
const greet = name => {
    const msg = `Hello, ${name}!`;
    return msg;
};

// 返回对象需加括号
const createUser = name => ({ name, age: 25 });

注意 :箭头函数没有自己的 this,在对象方法中要注意使用场景。

演示案例:

效果演示:


3.2 模板字符串

javascript 复制代码
const name = "Alice";
const age = 25;

const msg = `Hello, ${name}! You are ${age} years old.`;

const html = `
<div class="user">
  <h2>${name}</h2>
  <p>Age: ${age}</p>
</div>
`;

支持表达式和多行拼接。

演示案例:

效果演示:


3.3 解构赋值

javascript 复制代码
// 数组解构
const [a, b, c] = [1, 2, 3];

// 对象解构
const user = { name: "Alice", age: 25 };
const { name, age } = user;

// 函数参数解构
function greet({ name, age }) {
    return `Hello ${name}, you are ${age}`;
}

案例演示:

效果演示:


3.4 展开运算符

javascript 复制代码
// 数组展开
const arr1 = [1, 2];
const arr2 = [...arr1, 3, 4];

// 对象展开
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 };

3.5 练习示例

javascript 复制代码
function showUser({ name, age, email = "未设置" }) {
    return `
======== 用户信息 ========
姓名: ${name}
年龄: ${age}
邮箱: ${email}
========================
    `.trim();
}

console.log(showUser({ name: "Alice", age: 25 }));

四、Promise 基础与异步操作

核心概念

Promise 状态:

  • Pending(进行中)
  • Fulfilled(已成功)
  • Rejected(已失败)
javascript 复制代码
const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
        const success = true;
        if (success) resolve("操作成功");
        else reject("操作失败");
    }, 1000);
});

promise
    .then(result => console.log("成功:", result))
    .catch(error => console.error("失败:", error))
    .finally(() => console.log("完成"));

案例演示:

效果演示:


Promise 常用方法

javascript 复制代码
// 并行执行
Promise.all([fetch("/api/a"), fetch("/api/b")]);

// 竞速执行
Promise.race([fetch("/api/a"), fetch("/api/b")]);

练习示例

javascript 复制代码
function mockAPI() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (Math.random() < 0.8) resolve({ code: 200, data: ["item1","item2"] });
            else reject({ code: 500, message: "服务器错误" });
        }, 1000);
    });
}

mockAPI()
    .then(res => console.log("成功:", res))
    .catch(err => console.error("失败:", err));

五、async/await 语法

javascript 复制代码
async function getUser() {
    try {
        const response = await fetch("/api/user");
        const user = await response.json();
        return user;
    } catch (error) {
        console.error("获取失败:", error);
        throw error;
    }
}

// 并行请求
async function loadData() {
    const [users, orders] = await Promise.all([fetch("/api/users"), fetch("/api/orders")]);
}

注意:async 函数默认返回 Promise。


六、ES6 模块化

导出

javascript 复制代码
// math.js
export const PI = 3.14159;
export function add(a, b) { return a + b; }
export default class Calculator { add(a,b){return a+b;} }

导入

javascript 复制代码
import { PI, add } from "./math.js";
import Calculator from "./math.js";
const calc = new Calculator();

动态导入

javascript 复制代码
async function loadModule() {
    const module = await import("./math.js");
    console.log(module.add(3,4));
}

七、fetch/axios 请求基础

fetch

javascript 复制代码
const response = await fetch("/api/users");
if (!response.ok) throw new Error("请求失败");
const data = await response.json();

axios

javascript 复制代码
import axios from "axios";
const api = axios.create({ baseURL: "http://localhost:8000" });
const { data } = await api.get("/users");

对比

  • fetch:浏览器内置,需手动解析 JSON,错误需手动处理
  • axios:功能更完善,支持拦截器、超时、进度监控

八、综合项目实战------AI 对话应用

项目功能

  • 封装 API 模块
  • 消息发送和接收
  • 加载状态显示
  • 错误处理
  • 历史消息渲染

流程图

复制代码

核心代码示例

api.js

复制代码
javascript 复制代码
const BASE_URL = "http://localhost:8000";
export async function sendMessage(message){
    const res = await fetch(`${BASE_URL}/chat`,{
        method:"POST",
        headers:{"Content-Type":"application/json"},
        body:JSON.stringify({ message })
    });
    if (!res.ok) throw new Error(`请求失败: ${res.status}`);
    return res.json();
}

app.js

复制代码
javascript 复制代码
import { sendMessage } from "./api.js";
const chatBox = document.getElementById("chat-box");
const input = document.getElementById("message-input");
const sendBtn = document.getElementById("send-btn");

function appendMessage(role, content){
    const div = document.createElement("div");
    div.className = `message ${role}`;
    div.innerHTML = `<strong>${role==="user"?"你":"AI"}:</strong> ${content}`;
    chatBox.appendChild(div);
    chatBox.scrollTop = chatBox.scrollHeight;
}

async function handleSend(){
    const message = input.value.trim();
    if(!message) return;
    appendMessage("user", message);
    input.value = "";
    sendBtn.disabled = true;
    try{
        const data = await sendMessage(message);
        appendMessage("ai", data.reply || "未获取到回复");
    } catch(e){
        appendMessage("ai", `请求失败: ${e.message}`);
    } finally{
        sendBtn.disabled = false;
    }
}

sendBtn.addEventListener("click", handleSend);
input.addEventListener("keypress", e=>{
    if(e.key==="Enter") handleSend();
});

index.html 页面结构可参考前面示例。

九、总结

  1. 箭头函数、模板字符串、解构赋值
  2. Promise 异步处理
  3. async/await 编写异步代码
  4. ES6 模块化
  5. fetch/axios 请求及错误处理
  6. 前后端数据交互实现

本文结合了 ES6 核心语法与前后端交互的实战经验,如果对你的学习有帮助的话,可以点点免费的赞赞支持一下,谢谢各位!

每日励志文案:

先完成,再完美

相关推荐
ZC跨境爬虫10 小时前
模块化烹饪小程序开发日记 Day5:(后端Flask接口开发与AI智能解析菜谱的实现)
前端·人工智能·后端·python·ui·flask
右耳朵猫AI10 小时前
React技术周刊 2026年第16周
前端·react.js·前端框架
木易 士心10 小时前
Vue 事件总线(EventBus)详解
javascript·vue.js
丷丩10 小时前
工程级MVT地图瓦片服务器Web前端架构设计文档
前端·vue·gis·pinia·geoai-up
小鹿软件办公10 小时前
Google 在 Chrome 和搜索中加入 SynthID AI 图像检测功能
前端·人工智能·chrome
海兰10 小时前
【实用程序】图片处理服务,前端应用 (Vue 3 + Pinia + Vite)后端服务 (Node.js + Express + Sharp)
前端·javascript·vue.js·node.js·pinia
Hua-Jay10 小时前
OpenCV联合C++/Qt 学习笔记(二十四)----差值法检测移动物体、稠密光流法跟踪移动物体及稀疏光流法跟踪移动物体
c++·笔记·qt·opencv·学习·计算机视觉
是谁眉眼10 小时前
css讲解
前端
IT_陈寒10 小时前
Vite热更新失效?我在这坑里卡了一下午
前端·人工智能·后端