
本文详解如何通过 javascript(含 jquery 和原生 fetch)定时发起 get 请求,根据返回值(0 或 1)动态切换 html 元素的 css 类,实现空心圆与实心圆的实时状态可视化。
本文详解如何通过 javascript(含 jquery 和原生 fetch)定时发起 get 请求,根据返回值(0 或 1)动态切换 html 元素的 css 类,实现空心圆与实心圆的实时状态可视化。
在 Web 开发中,常需通过后端接口实时反映设备、服务或任务的状态(如“运行中”/“已停止”)。一个简洁直观的方式是用视觉元素——例如红圈:空心表示 0(关闭/未完成),实心表示 1(开启/已完成)。本教程将手把手带你实现一个每 5 秒自动轮询、异步响应、无刷新更新 DOM 的完整方案。
✅ 核心要点解析
-
异步不可阻塞:AJAX 请求是异步的,
if (getState == 0)这类同步判断完全无效(getState()返回undefined,且响应尚未到达); -
状态驱动样式:不操作内联样式,而是通过切换预定义 CSS 类(
.emptycircle/.fullcircle)实现样式解耦; -
定时轮询机制:使用
setInterval()规律触发请求,避免手动调用或重复计时器; -
现代替代方案:提供 jQuery 与纯原生 JavaScript(
fetch)双版本,兼顾兼容性与轻量化需求。
? 示例代码(推荐:原生 fetch 版)
<style>
.emptycircle, .fullcircle {
border-radius: 50%;
height: 20px;
width: 20px;
border: 2px solid red;
}
.fullcircle { background-color: #f00; }
</style><p id="state" class="emptycircle"></p>
<script>
const stateEl = document.getElementById("state");
// 每 5 秒轮询一次
setInterval(() => {
fetch('/state') // 替换为你的真实 API 地址,如 '/api/status'
.then(response => {
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.text(); // 若后端返回纯文本 "0" 或 "1"
})
.then(data => {
const value = parseInt(data.trim(), 10);
// 确保只接受 0 或 1,其他值默认为空心
stateEl.className = (value === 1) ? 'fullcircle' : 'emptycircle';
console.log('State updated:', value);
})
.catch(err => {
console.error('轮询失败:', err.message);
// 可选:保持上一状态,或降级显示警告样式
stateEl.className = 'emptycircle'; // 默认安全态
});
}, 5000);
</script>
? 说明:
- 使用
fetch('/state')替代 jQuery,减少外部依赖;- 显式处理 HTTP 错误(如 404、500)和解析异常;
parseInt(..., 10)确保字符串"1"正确转为数字1,避免==隐式转换陷阱;- 添加
.catch()实现健壮性——网络中断或服务不可用时,不崩溃并维持可读状态。
⚠️ 注意事项与最佳实践
- 避免频繁轮询压力:生产环境建议结合 Server-Sent Events(SSE)或 WebSocket 实现服务端主动推送,降低延迟与负载;
-
防抖与节流:若用户可能频繁切换页面或标签页,可配合
document.visibilityState暂停轮询(见扩展提示); -
CORS 配置:本地开发时若跨域报错,请确保后端响应头包含
Access-Control-Allow-Origin: *(或指定域名); -
语义化增强:为无障碍访问,可添加
aria-live="polite"和aria-label:<p id="state" class="emptycircle" aria-live="polite" aria-label="当前状态:关闭"></p>
并在
setState中同步更新aria-label。
anything-to-html下载将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
✅ 总结
你已掌握一个轻量、可靠、符合现代 Web 标准的状态轮询模式:以数据为驱动、以类名为桥梁、以定时器为节奏、以错误处理为底线。无论是监控 IoT 设备在线状态、CI/CD 流水线进度,还是表单提交后的服务响应,该模式均可快速复用。下一步,可尝试将其封装为可配置的 useStatusPoller(url, interval) 自定义 Hook(React)或 Web Component,进一步提升工程化水平。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










