使用JavaScript Fetch API动态展示API数据到HTML表格

使用javascript fetch api动态展示api数据到html表格

本文详细介绍了如何利用JavaScript的Fetch API从远程接口获取JSON数据,并将其高效地渲染到HTML表格中。教程涵盖了Fetch API的基本用法、正确解析API响应的关键步骤,以及两种DOM操作方法(createElement与innerHTML)的实践与性能考量,旨在帮助开发者构建动态数据展示功能。

Fetch API简介与基本用法

Fetch API是现代浏览器提供的一种用于进行网络请求的强大接口,它提供了一种更灵活、更强大的方式来替代传统的XMLHttpRequest。Fetch API基于Promise,使得异步操作链式处理更加简洁。

基本的使用方式如下:

fetch('YOUR_API_ENDPOINT')  .then(response => {    // 检查响应状态,确保请求成功    if (!response.ok) {      throw new Error(`HTTP error! status: ${response.status}`);    }    // 解析JSON格式的响应体    return response.json();  })  .then(data => {    // 在这里处理获取到的数据    console.log(data);  })  .catch(error => {    // 捕获请求或处理过程中发生的错误    console.error('Fetch operation failed:', error);  });

在这个例子中,fetch()函数发起一个网络请求,返回一个Promise。.then()方法用于处理Promise的成功状态。第一个.then()通常用于检查HTTP响应状态并解析响应体(例如response.json()解析JSON数据)。第二个.then()则接收解析后的数据进行进一步处理。.catch()方法用于捕获任何在Promise链中发生的错误。

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

理解API响应结构

在处理API数据时,首先需要明确API返回的JSON数据结构。错误的字段引用是常见的问题。以本教程使用的API为例:https://www.sponsorkliks.com/api/?club=11592&call=webshops_club_extension。

通过浏览器开发者工具查看其响应,可以发现返回的JSON数据结构如下:

{  "webshops": [    {      "id": "...",      "name_short": "...",      "link": "...",      "orig_url": "...",      "logo_120x60": "...",      // ... 更多字段    },    // ... 更多webshop对象  ]}

可以看到,实际的商铺数据位于一个名为webshops的数组中,而不是直接作为根对象。因此,在处理数据时,我们需要从响应数据中提取webshops数组。

动态创建DOM元素填充表格

一种常见的将API数据渲染到HTML表格的方法是动态创建DOM元素。这种方法直观易懂,通过JavaScript的document.createElement()、appendChild()等方法来构建表格行和单元格。

首先,准备HTML结构和CSS样式:

  API数据表格      table {      border-collapse: collapse;      width: 100%;      margin-top: 20px;    }    th, td {      padding: 8px;      text-align: left;      border-bottom: 1px solid #ddd;    }    th {      background-color: #f2f2f2;    }    img {      vertical-align: middle;    }    
名称 URL Logo
// JavaScript代码将在此处插入

接下来是使用createElement方式填充表格的JavaScript代码。关键在于从data对象中解构出webshops数组,并使用正确的字段名(例如item.name_short、item.link、item.orig_url、item.logo_120x60)。

fetch('https://www.sponsorkliks.com/api/?club=11592&call=webshops_club_extension')  .then(response => response.json())  .then(({ webshops }) => { // 使用解构赋值直接获取webshops数组    const tableBody = document.querySelector('#api-table tbody');    webshops.forEach(item => {      const row = document.createElement('tr');      const nameCell = document.createElement('td');      nameCell.textContent = item.name_short; // 使用正确的字段名      row.appendChild(nameCell);      const urlCell = document.createElement('td');      const urlLink = document.createElement('a');      urlLink.href = item.link; // 使用正确的字段名      urlLink.textContent = item.orig_url; // 使用正确的字段名      urlLink.target = '_blank'; // 建议在新标签页打开链接      urlCell.appendChild(urlLink);      row.appendChild(urlCell);      const logoCell = document.createElement('td');      const logoImg = document.createElement('img');      logoImg.src = item.logo_120x60; // 使用正确的字段名      logoImg.alt = item.name_short;      logoImg.style.maxWidth = '100px'; // 调整图片大小      logoCell.appendChild(logoImg);      row.appendChild(logoCell);      tableBody.appendChild(row);    });  })  .catch(error => console.error('获取或处理数据失败:', error));

优化DOM操作:使用innerHTML

虽然动态创建DOM元素的方法易于理解,但当需要渲染大量数据时,频繁的DOM操作(如createElement和appendChild)可能会导致性能问题。一种更高效的替代方案是构建一个HTML字符串,然后一次性通过innerHTML属性将其插入到DOM中。

fetch('https://www.sponsorkliks.com/api/?club=11592&call=webshops_club_extension')  .then(response => response.json())  .then(({ webshops }) => {    const tableBody = document.querySelector('#api-table tbody');    // 使用map方法将每个数据项转换为一个HTML行字符串,然后用join('')连接成一个完整的HTML字符串    tableBody.innerHTML = webshops.map(item => `              ${item.name_short}        ${item.orig_url}                  @@##@@                  `).join('');  })  .catch(error => console.error('获取或处理数据失败:', error));

这种方法通过模板字符串(“)和map()、join(”)的组合,将所有表格行的HTML内容一次性生成,然后赋值给tableBody.innerHTML。这大大减少了DOM操作的次数,从而提高了渲染性能。

完整示例代码

将HTML结构、CSS样式和优化后的JavaScript代码整合在一起,形成一个完整的、可运行的示例:

  API数据表格      table {      border-collapse: collapse;      width: 100%;      margin-top: 20px;    }    th, td {      padding: 8px;      text-align: left;      border-bottom: 1px solid #ddd;    }    th {      background-color: #f2f2f2;    }    img {      vertical-align: middle;    }    
名称 URL Logo
fetch('https://www.sponsorkliks.com/api/?club=11592&call=webshops_club_extension') .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(({ webshops }) => { const tableBody = document.querySelector('#api-table tbody'); tableBody.innerHTML = webshops.map(item => ` ${item.name_short} ${item.orig_url} @@##@@ `).join(''); }) .catch(error => console.error('获取或处理数据失败:', error));

注意事项与最佳实践

错误处理: 始终在Fetch请求中包含.catch()块来处理网络错误或API响应解析错误,提高应用的健壮性。API响应结构验证: 在处理API数据之前,最好通过console.log(data)或开发者工具检查其结构,确保你正在访问正确的字段。DOM操作性能: 对于少量数据,createElement方法是可接受的。但当数据量较大时,使用innerHTML结合模板字符串(或虚拟DOM库)通常能提供更好的性能。安全性: 当使用innerHTML时,如果数据来源于用户输入或不可信源,请务必进行内容清理(如防止XSS攻击),以避免安全漏洞。在本教程的场景中,API数据通常被认为是可信的,但仍需注意。用户体验: 在数据加载过程中,可以考虑添加加载指示器(如“加载中…”文本或旋转图标),提升用户体验。代码可读性: 保持JavaScript代码的清晰和模块化,例如将数据渲染逻辑封装到单独的函数中。

总结

通过本文的详细教程,我们学习了如何使用JavaScript的Fetch API从远程接口获取JSON数据,并将其高效地渲染到HTML表格中。掌握API响应结构、选择合适的DOM操作方法(createElement或innerHTML)以及实施健壮的错误处理是构建动态Web应用的关键。这些技术是现代前端开发中不可或缺的基础技能。

${item.name_short}${item.name_short}

以上就是使用JavaScript Fetch API动态展示API数据到HTML表格的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1530421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 21:58:49
下一篇 2025年12月20日 21:58:59

相关推荐

  • React Native ImagePicker:解决相机上传图片失败的问题

    在使用 react-native-image-crop-picker 库时,从相册选择图片上传成功,但使用相机拍摄图片上传却出现 504 超时错误?本文将深入探讨这个问题,分析可能的原因,并提供详细的解决方案,确保相机拍摄的图片也能顺利上传到服务器。通过修改文件上传的格式,区分相册和相机,针对不同平…

    2025年12月20日
    000
  • JavaScript WebSocket网络编程

    WebSocket协议实现全双工通信,适用于实时场景;通过new WebSocket()建立连接,监听onopen、onmessage、onerror、onclose事件处理交互;支持发送JSON或二进制数据;需设置binaryType处理ArrayBuffer等格式;网络不稳定时应实现重连机制与心…

    2025年12月20日
    000
  • 解决JavaScript Loading动画不显示的问题

    本文旨在解决JavaScript项目中Loading动画无法正常显示的问题。通过分析HTML结构、CSS样式以及JavaScript代码,详细阐述了导致动画不显示的常见原因,并提供了相应的解决方案,包括正确使用`style.display`属性控制元素显示、以及CSS选择器的正确使用,确保Loadi…

    2025年12月20日
    000
  • JavaScript类型转换与强制转换规则

    JavaScript类型转换分显式和隐式两种。显式转换通过Number()、String()、Boolean()手动转类型;隐式转换在运算时自动发生,如+操作符触发字符串拼接,数学运算符触发数字转换,逻辑判断依据真值表。使用==时会进行类型转换,推荐用===避免意外。对象转原始值调用valueOf(…

    2025年12月20日
    000
  • 移动端手势识别与交互实现

    答案:移动端手势识别需基于touch事件机制,通过监听touchstart、touchmove、touchend等事件计算位移与时间判断手势类型,如滑动、长按、缩放等;结合Hammer.js等库可简化实现,同时需设置阈值、避免默认行为冲突、处理多指操作与边界异常,确保交互流畅自然。 在移动端开发中,…

    2025年12月20日
    000
  • 前端权限控制系统设计

    前端权限控制核心是通过RBAC模型,结合动态路由、操作指令和菜单生成,根据用户角色实现页面访问、按钮显示和菜单渲染的动态管理,提升用户体验。1. 登录后获取用户角色与权限列表;2. 依据权限动态添加可访问路由,阻止无效跳转;3. 使用v-permission等指令控制操作可见性;4. 后端返回菜单结…

    2025年12月20日
    000
  • React Native ImagePicker:解决相机上传图片超时问题

    本文旨在解决 React Native 应用中使用 `react-native-image-crop-picker` 库时,从相册选择图片可以成功上传,但使用相机拍摄图片上传时出现 504 超时错误的问题。文章将分析问题可能的原因,并提供针对性的解决方案,帮助开发者顺利实现相机图片的上传功能。 在 …

    2025年12月20日
    000
  • 修复响应式导航栏菜单图标点击无反应的问题

    本文旨在解决在使用 HTML、CSS、Flexbox 和 JavaScript 创建的响应式导航栏中,菜单图标在屏幕缩小时点击无反应的问题。通过将 JavaScript 代码从 CSS 文件中分离出来,并确保正确引入到 HTML 文件中,可以有效地解决这个问题,保证导航栏在各种屏幕尺寸下的正常运作。…

    2025年12月20日
    000
  • JavaScript中的模块联邦(Module Federation)是如何工作的?

    模块联邦实现运行时代码共享,通过name、remotes、exposes和shared配置使应用间动态加载模块并共享依赖,支持独立部署与微前端集成。 模块联邦(Module Federation)是 Webpack 5 引入的一项功能,它让不同的 JavaScript 应用在运行时共享代码,而无需提…

    2025年12月20日
    000
  • JavaScript中的模板字符串(Template Literals)有哪些高级用法?

    模板字符串不仅支持变量拼接,还可嵌入表达式实现条件逻辑,如根据权限显示用户角色;能嵌套生成动态内容,常用于构建HTML;通过标签模板自定义处理函数,接收字符串片段和插值值,广泛应用于CSS-in-JS、XSS防护等;天然支持多行文本并保留格式,适合写SQL或文档说明,配合.trim()优化缩进;使用…

    2025年12月20日
    000
  • JavaScript无限滚动优化

    答案是使用虚拟滚动和Intersection Observer优化无限滚动性能。通过仅渲染可视区域内容、节流滚动事件、复用DOM节点及懒加载资源,有效降低内存占用与卡顿风险。 无限滚动在现代网页中很常见,尤其用于信息流、商品列表等场景。但若处理不当,页面会随着用户滚动不断加载元素,导致内存占用过高、…

    2025年12月20日
    000
  • JavaScript图像处理算法实现

    图像处理可通过Canvas API操作像素实现,灰度化采用加权平均公式gray = 0.299×R + 0.587×G + 0.114×B;亮度调节通过偏移RGB值,对比度调节利用系数缩放,需限制值在0-255;边缘检测使用Sobel算子计算梯度;处理前建议灰度化,注意边界与性能优化,大图可结合We…

    2025年12月20日
    000
  • JavaScript依赖注入容器

    依赖注入是通过外部注入依赖实现控制反转,提升解耦与可测试性;文中给出构造函数注入示例及简易DI容器实现,支持单例与瞬时生命周期管理,最后介绍使用场景与成熟库InversifyJS。 JavaScript中的依赖注入(Dependency Injection, DI)容器是一种设计模式工具,用于管理对…

    2025年12月20日
    000
  • 设计模式在复杂JavaScript应用中的实现

    单例模式确保全局唯一实例,适用于配置管理;观察者模式通过发布-订阅实现组件通信;工厂模式集中创建对象逻辑;装饰器模式动态扩展功能。这些模式提升代码可维护性与协作效率,应结合实际需求灵活运用。 在复杂的JavaScript应用中,设计模式是提升代码可维护性、可扩展性和协作效率的关键工具。合理使用设计模…

    2025年12月20日
    000
  • JavaScript引擎优化与性能调优策略

    JavaScript引擎通过JIT、隐藏类和内联缓存等机制提升执行效率,开发者应保持类型稳定、统一对象属性顺序、避免动态特性以编写可优化代码,并利用DevTools进行性能调优。 JavaScript引擎的性能直接影响网页和应用的响应速度与用户体验。现代JavaScript引擎(如V8、Spider…

    2025年12月20日
    000
  • 状态管理库原理与实现(Redux/Vuex)

    状态管理库核心是集中管理应用状态,确保变化可预测。Redux与Vuex均采用单一状态树,将所有状态存于一个store中;状态不可变,需通过action触发变更:Redux中action由reducer纯函数处理,返回新state;Vuex则通过mutation同步修改state,action处理异步…

    2025年12月20日
    000
  • JavaScript视频处理流程

    JavaScript通过HTML5、WebRTC和WebAssembly等技术实现视频处理,主要流程包括:1. 获取视频源,支持文件上传、摄像头捕获和网络流加载;2. 利用canvas逐帧提取视频图像,进行滤镜、灰度等像素级处理;3. 使用MediaRecorder API录制canvas流为新视频…

    2025年12月20日
    000
  • 如何实现一个支持撤销和重做(Undo/Redo)的JavaScript应用?

    答案是使用命令模式结合双栈实现撤销重做。通过封装操作为带execute和undo方法的命令对象,利用undoStack和redoStack管理操作历史,执行时入undo栈,撤销时转移到redo栈,重做则反向执行,并在执行新操作后清空redo栈以保证操作顺序正确。 实现一个支持撤销和重做的 JavaS…

    2025年12月20日
    000
  • JavaScript自动化构建流程

    代码检查使用ESLint和Prettier确保风格统一;2. Webpack/Vite等工具实现打包与Babel转译;3. Jest和Cypress完成单元与E2E测试;4. 通过CI/CD集成实现提交自动构建部署,提升效率。 JavaScript项目的自动化构建流程能大幅提升开发效率,减少人为错误…

    2025年12月20日
    000
  • 响应式编程与RxJS应用实践

    响应式编程通过数据流与变化传播简化异步处理,RxJS基于Observable、Observer、Operators和Subscription实现异步操作的声明式管理。1. 使用debounceTime防抖优化搜索请求;2. combineLatest合并多数据源;3. switchMap响应路由变化…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信