讲师中心 微信公众号
AI工具推荐 视频效率加速

php用ThinkPHP做统计图表步骤_ThinkPHPECharts整合教程【步骤】

轻婷酱_2978

轻婷酱_2978

发布时间:2026-01-29 13:21:29

|

861人浏览过

|

来源于php中文网

原创

ECharts 是纯前端图表库,ThinkPHP 仅提供 JSON 数据接口;需控制器用 json_encode() 输出结构化数据,前端通过 axios/fetch 获取后渲染图表,避免在 PHP 层生成图表或混入 HTML 内容。

php用thinkphp做统计图表步骤_thinkphpecharts整合教程【步骤】

确认 ECharts 版本与 ThinkPHP 前后端分工

ECharts 是纯前端图表库,ThinkPHP 只负责提供结构化数据(通常是 JSON),不渲染图表本身。常见误区是试图在 PHP 层“生成图表”,结果卡在模板渲染或 JS 加载时机上。

关键点在于:ThinkPHP 控制器输出 json_encode() 后的数据,前端用 axios 或 fetch 请求该接口,再传给 ECharts 实例。

  • 推荐使用 ECharts 5.x(稳定、文档全),避免 6.x 的按需引入复杂度
  • ThinkPHP 版本建议 6.0+(支持 RESTful 风格路由和 JSON 自动响应)
  • 不要把 echarts.min.js 放进 ThinkPHP 的 public/static 后就以为“集成完成”——JS 加载顺序、DOM 渲染时机、数据异步加载失败都得手动处理

ThinkPHP 后端准备 JSON 数据接口

控制器里返回干净的数组,不带 HTML、不 echo 其他内容,否则 JSON 解析会失败。

// app/controller/Chart.php
<?php
namespace app\controller;

use think\Controller;

class Chart extends Controller
{
    public function salesData()
    {
        // 模拟数据库查询(实际应替换为 Db::table()->select())
        $data = [
            ['month' => '1月', 'amount' => 12000],
            ['month' => '2月', 'amount' => 18500],
            ['month' => '3月', 'amount' => 15300],
        ];

        return json(['xAxis' => array_column($data, 'month'), 'series' => array_column($data, 'amount')]);
    }
}
  • 必须用 return json(...)(TP6)或 return $this->success(...)(TP5.1),确保 Content-Type 是 application/json
  • 字段名(如 xAxis、series)要和前端 JS 中取值一致,别写成 categories 或 dataList 后忘了同步改 JS
  • 如果数据量大,加 set_time_limit(0) 和分页/聚合逻辑,避免超时或内存溢出

前端页面引入 ECharts 并初始化图表

HTML 模板中需有容器元素(<div id="chart" style="width: 600px; height: 400px;"></div>),且确保 DOM 加载完成后再初始化 ECharts。

chartjs-reporter
chartjs-reporter

此技能用于在用户需要将结构化数据(查询结果、CSV 摘要、JSON 记录或 Python 字典/列表)转换为独立的 HTML 页面时使用。

下载

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

<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
  const chartDom = document.getElementById('chart');
  const myChart = echarts.init(chartDom);

  fetch('{:url("chart/salesData")}')
    .then(res => res.json())
    .then(data => {
      myChart.setOption({
        xAxis: { type: 'category', data: data.xAxis },
        yAxis: { type: 'value' },
        series: [{
          name: '销售额',
          type: 'bar',
          data: data.series
        }]
      });
    })
    .catch(err => console.error('图表数据加载失败:', err));
});
</script>
  • TP6 模板中用 {:url('chart/salesData')},TP5.1 用 {:url('chart/salesData')} 或完整 URL
  • 务必检查浏览器控制台 Network 标签页:请求是否 200?响应体是不是合法 JSON?有没有跨域?
  • 如果图表空白,先在 console.log(data) 确认数据结构,再查 myChart.setOption 是否被调用(DOM 未挂载会导致初始化失败)

处理常见报错和兼容性问题

最常卡住的地方不是代码写错,而是环境细节没对齐:

  • TypeError: Cannot read property 'init' of undefined → ECharts JS 未加载成功,检查网络请求或 CDN 地址是否被拦截
  • SyntaxError: Unexpected token < in JSON at position 0 → ThinkPHP 返回了 HTML(比如 404 页面或调试信息),检查路由是否匹配、控制器方法是否存在、是否开启了调试模式导致输出额外内容
  • 中文乱码 → ThinkPHP 默认输出 UTF-8,但若数据库或模板编码不是 UTF-8,json_encode() 会返回 null;统一用 mb_convert_encoding() 或设置数据库连接 charset
  • IE11 不支持 fetch → 换成 $.get()(需引入 jQuery)或加 whatwg-fetch polyfill

真正麻烦的从来不是“怎么画柱状图”,而是数据格式对不上、请求路径写错、JSON 中混入 HTML 注释、或者 ECharts 初始化时容器高度为 0 —— 这些地方一漏,图表就静默失败。

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

544

2025.11.26

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2175

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3362

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1136

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3859

2025.09.10

jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

601

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1136

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2222

2023.11.10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

20

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn