You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ESP8266 AP模式下SPIFFS存储Chart.js图表不显示问题求助

排查ESP8266 AP模式下Chart.js图表不显示的问题

我来帮你一步步梳理排查方向,结合你提供的代码,重点关注以下几个关键点:

1. 修复HTML中脚本的引用错误

你的HTML里犯了一个常见的语法错误:带有src属性的<script>标签不能同时包含内联代码,浏览器会忽略标签内部的JavaScript代码,导致图表初始化逻辑根本没执行。另外你同时引用了Chart.jsChart.min.js,但你说只上传了Chart.js到SPIFFS,这会导致Chart.min.js请求返回404。

修改后的HTML脚本部分应该是这样:

<script src="/Chart.js" type="text/javascript"></script>
<script type="text/javascript">
var pieData = {
 datasets: [{
 data: [20, 40, 10, 30],
 backgroundColor: ["#878BB6", "#4ACAB4", "#FF8153", "#FFEA88"]
 }]
};
// Get the context of the canvas element we want to select
var countries = document.getElementById("countries").getContext("2d");
new Chart(countries, { type: 'pie', data: pieData });
</script>

2. 验证SPIFFS中的文件是否正确上传

查看你串口监视器输出的文件列表,确认以下两点:

  • /Chart.js/index.html都存在,且文件大小不为0(如果文件大小是0,说明上传失败)
  • 文件名完全匹配(ESP8266的SPIFFS是区分大小写的,比如chart.jsChart.js是两个不同的文件)

如果文件缺失或大小异常,重新使用Arduino IDE的「ESP8266 Sketch Data Upload」工具上传data文件夹,确保上传过程没有报错。

3. 用浏览器开发者工具排查请求问题

在浏览器中打开网页后按F12打开开发者工具,切换到「Network」标签页:

  • 刷新页面,查看Chart.js的请求状态:如果是404,说明服务器找不到这个文件,回到第2步确认文件上传情况;如果是200,查看响应内容是否是完整的Chart.js代码
  • 切换到「Console」标签页,查看是否有JavaScript报错(比如Chart is not defined,说明Chart.js没加载成功;或者Cannot read properties of null,说明找不到canvas元素)

4. 检查WebServer的文件处理逻辑

你的handleNotFound函数中,.js文件的Content-Type设置为application/javascript是正确的,但可以优化一下SPIFFS的挂载逻辑——你在setup里调用了两次SPIFFS.begin(),可以改成:

if (!SPIFFS.begin()) {
 Serial.println("Failed to mount filesystem!\n");
 return;
} else {
 Dir dir = SPIFFS.openDir("/");
 while (dir.next()) {
 String fileName = dir.fileName();
 size_t fileSize = dir.fileSize();
 Serial.printf("FS File: %s, size: %u\n", fileName.c_str(), fileSize);
 }
 Serial.printf("\n");
}

避免重复挂载的冗余操作。

5. 确认Canvas元素的可访问性

在初始化Chart的代码前加几行调试代码,确认能正确获取到canvas元素和上下文:

var canvas = document.getElementById("countries");
console.log("Canvas element:", canvas); // 查看是否为null
var countries = canvas.getContext("2d");
console.log("Canvas context:", countries); // 查看是否为null
new Chart(countries, { type: 'pie', data: pieData });

然后在浏览器控制台查看输出,如果canvas是null,说明id拼写错误或者脚本执行时DOM还没加载完成(可以把脚本放到</body>标签前,确保DOM加载完毕)。

内容的提问来源于stack exchange,提问作者Marion Boynton

火山引擎 最新活动