ESP8266项目:WebSocket传输RGB值无法实时更新颜色框求助
解决方案
问题根源
你之前尝试的类型转换逻辑完全错误,比如Integer.valueOf((String) "Rvalue")是把字符串"Rvalue"(不是接收到的实际数值)转成整数,这会直接导致NaN或者报错,中断后续代码执行,进而让RGB值也无法正常显示。实际上ESP发送的JSON里的Rvalue/Gvalue/Bvalue本身就是数字类型,前端解析后可以直接使用。
修正后的前端代码
把WebSocket的onmessage函数改成下面这样,直接使用解析后对象里的数值来更新CSS变量:
websock.onmessage = function(event) { var obj = JSON.parse(event.data); document.getElementById('Rvalue').innerHTML = obj.Rvalue; document.getElementById('Gvalue').innerHTML = obj.Gvalue; document.getElementById('Bvalue').innerHTML = obj.Bvalue; const root = document.documentElement; // 直接拼接接收到的RGB数值 root.style.setProperty('--box-color', `${obj.Rvalue}, ${obj.Gvalue}, ${obj.Bvalue}`); }
关键说明
- ESP端发送的JSON数据是正确的,
random(100)生成的是数字,序列化后JSON里的对应字段也是数字类型,所以前端JSON.parse后obj.Rvalue直接是可用的数字,不需要任何额外转换。 - 你之前错误的类型转换代码(比如引用不存在的
jsonObj、硬编码字符串转数字)会引发JavaScript错误,导致代码执行到那里就停止,所以连RGB数值的更新都会被中断,移除这些错误代码即可正常运行。
内容的提问来源于stack exchange,提问作者krakosky
相关产品推荐
相关产品推荐

