讲师中心 微信公众号
AI工具推荐 视频效率加速

Web前端:如何在HTML页面中高效获取API数据并动态渲染表格

落敏姑娘_1011

落敏姑娘_1011

发布时间:2025-12-04 12:51:39

|

193人浏览过

|

来源于php中文网

原创

web前端:如何在html页面中高效获取api数据并动态渲染表格

本教程详细介绍了如何在Web页面中使用JavaScript的Fetch API从远程接口获取JSON数据,并将其动态渲染到HTML表格中。文章涵盖了HTML表格结构、异步数据请求、JSON数据解析、DOM元素操作的最佳实践,特别是强调了`DOMContentLoaded`事件的重要性以及正确使用`innerHTML`来填充表格头部和内容,旨在帮助开发者构建功能完善的数据展示页面。

在现代Web开发中,从后端API获取数据并在前端页面展示是常见的需求。本教程将引导您完成这一过程,重点讲解如何利用JavaScript的Fetch API获取JSON数据,并将其动态地渲染到一个HTML表格中。

1. HTML基础结构准备

首先,我们需要一个基本的HTML页面结构,其中包含一个用于展示数据的表格。为了更好地组织表格内容,我们通常会使用(表格头部)和

(表格主体)标签。
<!DOCTYPE html>
<html>
  <head>
    <title>API数据动态表格</title>
    <meta charset="UTF-8" />
  </head>
  <body>
    <h1>NASA设施列表</h1>

    <table id="data-table">
      <thead></thead>
      <tbody></tbody>
    </table>

    <script src="main.js"></script> <!-- 引入外部JavaScript文件 -->
  </body>
</html>

在上述HTML结构中:

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

  • 我们创建了一个id为data-table的元素。
  • 和是空的,它们的内容将由JavaScript动态填充。
  • <script src="main.js"></script>用于引入我们的JavaScript逻辑。为了更好的代码组织和维护,强烈建议将JavaScript代码放在单独的文件中。
  • 2. 使用Fetch API获取数据

    Fetch API是现代浏览器提供的一个强大的接口,用于进行网络请求。它基于Promise,使得处理异步请求更加简洁。

    我们将以NASA的一个公开API为例:https://data.nasa.gov/resource/gvk9-iz74.json。

    // main.js
    
    // 确保DOM完全加载后再执行脚本
    document.addEventListener("DOMContentLoaded", function () {
      fetch("https://data.nasa.gov/resource/gvk9-iz74.json")
        .then((response) => {
          // 检查响应是否成功
          if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
          }
          return response.json(); // 将响应体解析为JSON
        })
        .then((data) => {
          // 数据获取成功后,开始渲染表格
          renderTable(data);
        })
        .catch((error) => {
          // 捕获请求或解析过程中的错误
          console.error("获取数据时发生错误:", error);
          document.getElementById('data-table').innerHTML = `<tr><td colspan="4">加载数据失败,请稍后再试。</td></tr>`;
        });
    });

    关键点解析:

    • document.addEventListener("DOMContentLoaded", function() { ... });: 这是非常重要的一步。它确保了我们的JavaScript代码只在整个HTML文档(DOM)被完全加载和解析后才执行。如果没有这个,JavaScript可能会尝试操作尚未存在的HTML元素,导致错误。
    • fetch(url): 发起一个GET请求到指定的URL。
    • .then((response) => response.json()): fetch返回一个Promise,当请求成功时,response对象可用。我们首先检查response.ok确保HTTP状态码在200-299之间,然后调用response.json()方法,它会再次返回一个Promise,用于将响应体解析为JavaScript对象。
    • .then((data) => { ... }): 当JSON解析成功后,data参数将包含从API获取到的JavaScript对象(通常是数组)。
    • .catch((error) => { ... }): 用于捕获在fetch请求或.then()链中发生的任何错误,例如网络问题、服务器错误或JSON解析失败。

    3. 动态渲染表格内容

    获取到数据后,我们需要将其格式化为HTML表格行,并插入到

    和

    中。
    // main.js (在DOMContentLoaded事件监听器内部,紧接在fetch请求之后)
    
    function renderTable(data) {
      const tableHead = document.querySelector("#data-table thead");
      const tableBody = document.querySelector("#data-table tbody");
    
      // 清空现有内容(可选,如果表格可能被多次更新)
      tableHead.innerHTML = '';
      tableBody.innerHTML = '';
    
      // 1. 渲染表格头部 (<thead>)
      let headerRow = `
        <tr>
          <th>中心名称</th>
          <th>城市</th>
          <th>州</th>
          <th>邮编</th>
        </tr>`;
      tableHead.innerHTML = headerRow;
    
      // 2. 渲染表格主体 (<tbody>)
      let rowsHtml = "";
      data.forEach((facility) => {
        // 确保数据字段存在,避免undefined
        const center = facility.center || 'N/A';
        const city = facility.city || 'N/A';
        const state = facility.state || 'N/A';
        const zipcode = facility.zipcode || 'N/A';
    
        rowsHtml += `
          <tr>
            <td>${center}</td>
            <td>${city}</td>
            <td>${state}</td>
            <td>${zipcode}</td>
          </tr>
        `;
      });
      tableBody.innerHTML = rowsHtml;
    }

    关键点解析:

    • document.querySelector("#data-table thead") 和 document.querySelector("#data-table tbody"): 使用querySelector选择器精确地获取表格的头部和主体元素。
    • innerHTML vs innerText:
      • innerHTML: 用于设置或获取元素的HTML内容。当您需要将包含HTML标签的字符串插入到DOM中时,必须使用innerHTML。
      • innerText: 仅用于设置或获取元素的纯文本内容。如果您尝试将包含HTML标签的字符串赋给innerText,这些标签将被视为普通文本并显示出来,而不是被浏览器解析为HTML元素。
      • 在原问题中,一个常见的错误是将包含
    、(表格行)字符串,并将其累加到rowsHtml变量中。
  • 模板字符串: 使用ES6的模板字符串(反引号 `)可以方便地嵌入变量(${variable})和多行文本,使得HTML字符串的构建更加直观。
  • 数据健壮性: 在访问facility.center等属性时,最好加上默认值(|| 'N/A'),以防API返回的数据中缺少某个字段,避免页面出现undefined。
  • 4. 完整代码示例

    将上述HTML和JavaScript代码整合后,您的index.html和main.js文件应如下所示:

    index.html:

    <!DOCTYPE html>
    <html>
      <head>
        <title>API数据动态表格</title>
        <meta charset="UTF-8" />
        <style>
          /* 简单的表格样式,使其更具可读性 */
          table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
          }
          th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
          }
          th {
            background-color: #f2f2f2;
          }
        </style>
      </head>
      <body>
        <h1>NASA设施列表</h1>
    
        <table id="data-table">
          <thead></thead>
          <tbody></tbody>
        </table>
    
        <script src="main.js"></script>
      </body>
    </html>

    main.js:

    document.addEventListener("DOMContentLoaded", function () {
      fetch("https://data.nasa.gov/resource/gvk9-iz74.json")
        .then((response) => {
          if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
          }
          return response.json();
        })
        .then((data) => {
          renderTable(data);
        })
        .catch((error) => {
          console.error("获取数据时发生错误:", error);
          const tableElement = document.getElementById('data-table');
          if (tableElement) {
            tableElement.innerHTML = `<thead><tr><th>加载失败</th></tr></thead><tbody><tr><td>无法加载数据,请检查网络或稍后再试。</td></tr></tbody>`;
          }
        });
    
      function renderTable(data) {
        const tableHead = document.querySelector("#data-table thead");
        const tableBody = document.querySelector("#data-table tbody");
    
        // 清空现有内容,确保每次渲染都是最新的
        tableHead.innerHTML = '';
        tableBody.innerHTML = '';
    
        // 渲染表格头部
        let headerRow = `
          <tr>
            <th>中心名称</th>
            <th>城市</th>
            <th>州</th>
            <th>邮编</th>
          </tr>`;
        tableHead.innerHTML = headerRow;
    
        // 渲染表格主体
        let rowsHtml = "";
        data.forEach((facility) => {
          const center = facility.center || 'N/A';
          const city = facility.city || 'N/A';
          const state = facility.state || 'N/A';
          const zipcode = facility.zipcode || 'N/A';
    
          rowsHtml += `
            <tr>
              <td>${center}</td>
              <td>${city}</td>
              <td>${state}</td>
              <td>${zipcode}</td>
            </tr>
          `;
        });
        tableBody.innerHTML = rowsHtml;
      }
    });

    总结与注意事项

    通过本教程,您应该已经掌握了在Web页面中从API获取数据并动态渲染到HTML表格的基本方法。以下是一些重要的总结和注意事项:

    • DOMContentLoaded: 始终确保您的JavaScript代码在DOM完全加载后再执行,以避免操作不存在的元素。
    • Fetch API: 它是进行异步网络请求的现代标准,基于Promise,易于使用。
    • response.json(): 用于将API响应体解析为JavaScript对象。
    • innerHTML: 用于动态插入包含HTML标签的字符串。切勿与innerText混淆。
    • 结构化表格: 使用
    和可以更好地组织表格内容,便于样式化和语义化。
  • 错误处理: 总是为fetch请求添加.catch()块,以优雅地处理网络错误或数据解析失败的情况,并向用户提供反馈。
  • 数据健壮性: 在访问API返回的数据属性时,考虑数据可能缺失的情况,并提供默认值,增强代码的健壮性。
  • 代码组织: 将JavaScript代码放在单独的.js文件中是一个良好的实践。
  • 性能优化: 对于非常大的数据集,一次性构建和插入大量HTML字符串可能会影响性能。可以考虑虚拟滚动、分页或分批加载等优化策略。
  • 等HTML标签的字符串赋给innerText,这会导致表格无法正确渲染。正确的方法是使用innerHTML。
  • 数据遍历与拼接: 使用forEach循环遍历从API获取到的data数组,为每个数据项构建一个

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

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

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

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

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

2175

2023.08.07

json是什么
json是什么

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

3402

2023.08.23

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

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

1136

2023.10.13

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

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

3919

2025.09.10

es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

285

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

406

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

375

2025.12.24

resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.12.20

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn