ThinkPHP仅负责准备JSON数据交由前端ECharts渲染,控制器查库组织数组并用json()返回,前端用Ajax获取后调用echarts.init()和setOption()初始化图表。

ThinkPHP 本身不画图,只负责把干净、结构化的数据准备好,以 JSON 格式交给前端;ECharts 在浏览器里接收这些数据,再渲染成图表。关键不是“在 PHP 里生成图表”,而是“让前后端各司其职、顺畅对接”。
控制器输出标准 JSON 数据
在 ThinkPHP 控制器中,不要拼 HTML、不调 JS、不写 echarts.init()。只需查库、组织数组、用 json_encode() 输出:
- 用 Db 类或模型查询原始数据(如销售额、用户数、地区分布)
- 把结果转为 ECharts 能直接消费的格式——比如柱状图需要
xAxis.data和series[0].data两个数组 - 设置响应头:
header('Content-Type: application/json; charset=utf-8'); - 最后
return json($data);(ThinkPHP 6+ 推荐写法)或echo json_encode($data, JSON_UNESCAPED_UNICODE);
前端通过 Ajax 获取并初始化图表
HTML 页面中引入 ECharts(CDN 或本地),准备一个带宽高的 DOM 容器,再用 JavaScript 请求接口:
ECharts 图表大师。根据用户数据和业务上下文,自动设计并生成专业的 ECharts 可视化图表。使用场景:(1) 用户提供表格/JSON/CSV 数据需要可视化,(2) 用户说"帮我做个图"、"画个图表",(3) 需要将查询结果可视化展示。
- 推荐用 axios 或 fetch,避免 jQuery 的过时写法
- 请求地址写成 ThinkPHP 路由形式,如
/api/chart/sales(对应控制器方法) - 拿到响应后,调用
echarts.init(),再用setOption()填入配置和数据 - 注意处理加载状态和错误提示,比如加 loading 效果或空数据占位
常见类型的数据结构示例
不同图表对数据格式要求不同,后端需按需组织:
立即学习“PHP免费学习笔记(深入)”;
-
柱状图/折线图:返回含
categories(x 轴标签)和values(数值数组)的对象 -
饼图:返回
[{name: 'A', value: 35}, {name: 'B', value: 65}]这样的 series 数据 -
地图/散点图:需包含
lng、lat、value字段的数组,必要时补充 geoJSON 或自定义坐标系 - 所有字段名要与前端 option 中的 key 严格一致,避免大小写或下划线差异
调试与优化要点
接口通了但图表不显示?重点检查这几处:
- 浏览器开发者工具 Network 标签页,确认接口返回的是纯 JSON,且状态码为 200
- 查看响应内容是否含中文乱码(确保数据库、PHP 文件、HTTP 头三者编码均为 UTF-8)
- ECharts 实例是否在 DOM 加载完成后再初始化(可用
onMounted或$(document).ready()) - 数据量大时,考虑分页、聚合或懒加载,避免一次性传几万条记录


















