0

0

前端页面初始化时自动获取并渲染数据库数据的完整实践指南

心靈之曲

心靈之曲

发布时间:2026-03-15 10:47:06

|

323人浏览过

|

来源于php中文网

原创

前端页面初始化时自动获取并渲染数据库数据的完整实践指南

本文详解如何在网页加载时通过 get 请求从后端 api 获取数据,并动态渲染到 html 表格中,实现前后端联动的数据展示闭环,适用于初学者构建全栈 crud 应用。

本文详解如何在网页加载时通过 get 请求从后端 api 获取数据,并动态渲染到 html 表格中,实现前后端联动的数据展示闭环,适用于初学者构建全栈 crud 应用。

在你已成功实现 POST 提交表单数据至数据库的基础上,GET 请求的核心作用是“读取”而非“写入”——它负责在页面首次加载、用户关闭弹窗后刷新视图,或点击“刷新列表”按钮时,从服务端拉取最新数据并更新表格内容。你当前的 script.js 中注释掉的 GET 尝试逻辑方向正确,但缺失了三个关键环节:触发时机(何时发请求)、响应处理(如何解析 JSON)、DOM 渲染(怎样填入表格)。下面我们将一步步补全。

✅ 一、在页面加载完成时发起 GET 请求

使用 DOMContentLoaded 事件确保 DOM 构建完毕后再执行请求,避免因元素未就绪导致操作失败:

// script.js —— 新增:页面加载时获取全部数据并渲染表格
document.addEventListener("DOMContentLoaded", async () => {
  try {
    const response = await fetch('http://my_data:3000/mine_info');
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    const rows = await response.json();

    // 清空原有表格主体(保留表头)
    const tableBody = document.querySelector('#mine_info tbody') || 
                      document.querySelector('#mine_info').insertRow(0).parentNode;

    // 如果没有 tbody,直接清空除第一行(表头)外的所有行
    const table = document.querySelector('#mine_info');
    while (table.rows.length > 1) {
      table.deleteRow(1);
    }

    // 遍历数据,逐行插入
    rows.forEach((row, index) => {
      const tr = table.insertRow();
      tr.innerHTML = `
        <td><p>${index + 1}</p></td>
        <td><p>${row.n_mine || ''}</p></td>
        <td><p>${row.name_mine || ''}</p></td>
        <td><p>${row.adress || ''}</p></td>
        <td><p>${row.full_name_of_direcor || ''}</p></td>
        <td><p>${row.phone_number || ''}</p></td>
      `;
    });

  } catch (error) {
    console.error('Failed to load mine info:', error);
    alert('⚠️ 数据加载失败,请检查后端是否运行正常(如 http://my_data:3000/mine_info 是否可访问)');
  }
});

? 注意字段映射一致性:你的后端 getMineinfo 返回的是数据库列名(如 n_mine, name_mine),而前端表格期望显示这些字段。请确认 PostgreSQL 表结构中的列名与 row.xxx 访问路径完全匹配(大小写敏感),否则会渲染为空字符串。

✅ 二、优化表单提交后的自动刷新(无需整页重载)

你当前的 form.addEventListener('submit') 已正确阻止默认提交行为,并执行 POST。为提升用户体验,提交成功后应立即重新 GET 数据,使新增行实时出现在表格中,无需手动刷新页面:

立即学习前端免费学习笔记(深入)”;

Cutout.Pro抠图
Cutout.Pro抠图

AI批量抠图去背景

下载
// 在 form.submit 的 try 块末尾添加(紧接在 POST 成功之后)
// ... POST 请求成功后 ...
console.log('✅ Row created successfully');

// 立即刷新表格数据
await loadMineInfo(); // 复用封装好的函数

// 关闭弹窗
form.classList.remove('open');
popup.classList.remove('popup_open');

同时,将上述 GET 渲染逻辑提取为可复用函数:

async function loadMineInfo() {
  const table = document.querySelector('#mine_info');
  // 清空旧数据(保留表头)
  while (table.rows.length > 1) table.deleteRow(1);

  try {
    const res = await fetch('http://my_data:3000/mine_info');
    const data = await res.json();
    data.forEach((r, i) => {
      const tr = table.insertRow();
      tr.innerHTML = `
        <td><p>${i + 1}</p></td>
        <td><p>${r.n_mine || ''}</p></td>
        <td><p>${r.name_mine || ''}</p></td>
        <td><p>${r.adress || ''}</p></td>
        <td><p>${r.full_name_of_direcor || ''}</p></td>
        <td><p>${r.phone_number || ''}</p></td>
      `;
    });
  } catch (err) {
    console.error('Load failed:', err);
  }
}

并在 DOMContentLoaded 中调用它:

document.addEventListener("DOMContentLoaded", () => {
  loadMineInfo(); // 页面加载时首次拉取
});

✅ 三、关键注意事项与调试建议

  • CORS 配置已就绪:你已在 Express 中启用 app.use(cors()),确保浏览器允许跨域请求(若前端地址非 http://my_data:3000,需确认域名/端口一致或配置白名单)。
  • 后端路由匹配:GET 请求地址 http://my_data:3000/mine_info 必须与 Express 中 app.get('/mine_info', ...) 完全一致(无尾部斜杠差异)。
  • HTML 结构健壮性:原始代码中 <table> 内无 <tbody>,但 insertRow() 默认在 <tbody> 中插入;若不存在,现代浏览器会自动创建,但显式添加更稳妥:
    <table id="mine_info">
      <thead>
        <tr>...</tr>
      </thead>
      <tbody></tbody> <!-- 显式声明 -->
    </table>
  • 错误防御:服务端返回非 2xx 状态码(如 500 错误)时,response.ok 为 false,应捕获并提示用户,而非静默失败。
  • 调试技巧:在浏览器控制台直接运行 fetch('http://my_data:3000/mine_info').then(r => r.json()).then(console.log),验证 API 是否返回预期 JSON 数组。

✅ 总结

GET 请求不是“可选项”,而是前端数据驱动 UI 的基石。它让你的表格具备自更新能力:页面加载 → 拉取全量数据 → 用户新增 → POST 成功 → 自动再次 GET → 表格实时刷新。这一闭环构成了现代 Web 应用的基本交互范式。你现在已掌握前后端通信的两大支柱(GET 读取 / POST 写入),下一步可延伸实现:按 ID 删除、编辑行内修改、分页加载等进阶功能。坚持下去,第一个全栈项目就在眼前!

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

434

2026.02.10

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号