ECHARTS页面空白,找不到原因

ksfantasy 2019-05-22 02:43:00
找不到问题出在哪里,
ECHARTS的页面代码:

GETE有json数据传回,
[{"btcid":"1","cash":100},{"btcid":"2","cash"200},{"btcid":"3","cash":400}]



@{
ViewBag.Title = "eline";
}

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title>首页</title>
<script src="../js/mui.min.js"></script>
<link href="../css/mui.min.css" rel="stylesheet" />
<script src="../js/jquery-3.3.1.min.js"></script>
<script src="../js/echarts.min.js"></script>
<script src="../js/vue.min.js"></script>
<style>
html,
body {
background-color: #efeff4;
}

.title {
margin: 20px 15px 10px;
color: #6d6d72;
font-size: 15px;
padding-bottom: 51px;
}
</style>
</head>

<body>
<div class="mui-content">
<div class="title" id="main" style="width: 100%;height: 600px;">

</div>
</div>

<script src="../js/util.js"></script>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例



var myChart = null;



let data1 = [];



var option = {
title: { //图表标题
text: 'E图表'
},
tooltip: {
trigger: 'axis', //坐标轴触发提示框,多用于柱状、折线图中
/*
dataZoom: [
{
type: 'slider', //支持鼠标滚轮缩放
start: 0, //默认数据初始缩放范围为10%到90%
end: 100
},
{
type: 'inside', //支持单独的滑动条缩放
start: 0, //默认数据初始缩放范围为10%到90%
end: 100
}
],
legend: { //图表上方的类别显示
show: true,
data: ['btcid', 'cash']
},
color: [
'#FF3333', //温度曲线颜色
'#53FF53', //湿度曲线颜色

],
toolbox: { //工具栏显示
show: true,
feature: {
saveAsImage: {} //显示“另存为图片”工具
}
},
xAxis: { //X轴
type: 'categoty',
data: [] //先设置数据值为空,后面用Ajax获取动态数据填入
},
yAxis: [ //Y轴(这里我设置了两个Y轴,左右各一个)
{
//第一个(左边)Y轴,yAxisIndex为0
type: 'value',
/* max: 120,
min: -40, */
axisLabel: {
formatter: '{value}' //控制输出格式
}
}
],
series: [ //系列(内容)列表
{
name: 'cash',
type: 'line', //折线图表示(生成温度曲线)
symbol: 'emptyrect', //设置折线图中表示每个坐标点的符号;emptycircle:空心圆;emptyrect:空心矩形;circle:实心圆;emptydiamond:菱形
data: data1 //数据值通过Ajax动态获取
},

]
};




function refreshData() {


setInterval(() => {

$.getJSON({
url: "http://localhost/Home/GetE/"
success: (rep) => {
console.log(rep);
if (rep != null) {

for (var i = 0; i < len; i++) {
let dataItem = rep[i];

var obj1 = {

name: dataItem.btcid
value: [
dataItem.btcid
dataItem.cash
]
};
data1.push(obj1);


if (data1.length > 50) {
data1.shift();
}
}
myChart.setOption(option);

}
}
, error: (e) => {
console.log(JSON.stringify(e));
}
});
}, 1000);
}

</script>


</body>

</html>


...全文
3092 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
萌主_iii 2019-11-19
  • 打赏
  • 举报
回复
myChart.setOption(option, true);即可,这样不会合并之前的数据
ksfantasy 2019-05-27
  • 打赏
  • 举报
回复
目前解决了以上问题,但是data1的数据一直在add,也就是说数据库只有3个数据,但是图表每次接着画数据。 有没有办法让ECHART只画当前得到的数据,而不是无限接着画? 比如说,数据库只有3个数组,我想让ECHART无论VUE怎么刷新,都只画3个点, 而不是无数个重复的 3个点。 debug看了,data1下会不断添加数据库的3个数据,变成一堆数据 function refreshData() { setInterval(() => { $.getJSON({ url: "http://localhost/Home/GetE", success: (rep) => { console.log(rep); if (rep != null) { const len = rep.length; for (var i = 0; i < len; i++) { let dataItem = rep[i]; //Object.keys(data1).forEach(k => delete data1[k]) var obj1 = { name: dataItem.btcid, value: dataItem.cash }; data1.push(obj1); if (data1.length > 50) { data1.shift(); } } } myChart.setOption(option); } , error: (e) => { console.log(JSON.stringify(e)); } }); }, 10000); }
ksfantasy 2019-05-27
  • 打赏
  • 举报
回复
我做了断点,但是有错误eline:formatted:0:173 Uncaught TypeError: Cannot read property 'setOption' of null 最新代码贴一下: @{ ViewBag.Title = "eline"; } <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title>首页</title> <script src="../js/mui.min.js"></script> <link href="../css/mui.min.css" rel="stylesheet" /> <script src="../js/jquery-3.3.1.min.js"></script> <script src="../js/echarts.min.js"></script> <script src="../js/vue.min.js"></script> <style> html, body { background-color: #efeff4; } .title { margin: 20px 15px 10px; color: #6d6d72; font-size: 15px; padding-bottom: 51px; } </style> </head> <body> <div class="mui-content"> <div class="title" id="main" style="width: 100%;height: 600px;"> </div> </div> <script src="../js/util.js"></script> <script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myChart = null; let data1 = []; var option = { title: { //图表标题 text: 'E图表' }, tooltip: { trigger: 'axis', //坐标轴触发提示框,多用于柱状、折线图中 }, dataZoom: [ { type: 'slider', //支持鼠标滚轮缩放 start: 0, //默认数据初始缩放范围为10%到90% end: 100 }, { type: 'inside', //支持单独的滑动条缩放 start: 0, //默认数据初始缩放范围为10%到90% end: 100 } ], legend: { //图表上方的类别显示 show: true, data: ['btcid', 'cash'] }, color: [ '#FF3333', //温度曲线颜色 '#53FF53', //湿度曲线颜色 ], toolbox: { //工具栏显示 show: true, feature: { saveAsImage: {} //显示“另存为图片”工具 } }, xAxis: { //X轴 type: 'categoty', data: [] //先设置数据值为空,后面用Ajax获取动态数据填入 }, yAxis: [ //Y轴(这里我设置了两个Y轴,左右各一个) { //第一个(左边)Y轴,yAxisIndex为0 type: 'value', /* max: 120, min: -40, */ axisLabel: { formatter: '{value}' //控制输出格式 } } ], series: [ //系列(内容)列表 { name: 'cash', type: 'line', //折线图表示(生成温度曲线) symbol: 'emptyrect', //设置折线图中表示每个坐标点的符号;emptycircle:空心圆;emptyrect:空心矩形;circle:实心圆;emptydiamond:菱形 data: data1 //数据值通过Ajax动态获取 }, ] }; $(function () { refreshData(); }); function refreshData() { setInterval(() => { $.getJSON({ url: "http://localhost/Home/GetE", success: (rep) => { console.log(rep); if (rep != null) { const len = rep.length; for (var i = 0; i < len; i++) { let dataItem = rep[i]; var obj1 = { name: dataItem.btci, value: dataItem.cash }; data1.push(obj1); if (data1.length > 50) { data1.shift(); } } } myChart.setOption(option); } , error: (e) => { console.log(JSON.stringify(e)); } }); }, 1000); } </script> </body > </html > 请指点一下
stherix 2019-05-22
  • 打赏
  • 举报
回复
引用 2 楼 ksfantasy 的回复:
[quote=引用 1 楼 stherix 的回复:] 在 myChart.setOption(option); 这里设断点 看看里面的值是不是正确的
这个好像没办法调试,设置启动项目了,还是提示不能命中,我甚至加了script: $(function () { refreshData(); }); 请问要如何才能命中代码行调试啊?[/quote] 你要在浏览器里设断点 比如chrome
ksfantasy 2019-05-22
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
在 myChart.setOption(option); 这里设断点 看看里面的值是不是正确的
这个好像没办法调试,设置启动项目了,还是提示不能命中,我甚至加了script: $(function () { refreshData(); }); 请问要如何才能命中代码行调试啊?
stherix 2019-05-22
  • 打赏
  • 举报
回复
在 myChart.setOption(option); 这里设断点 看看里面的值是不是正确的
作者Hankkin,源码PageLayoutDemo,一款简单的 page 切换 空布局、错误布局、加载布局,支持一键配置、定义,不需要 xml 编写该功能是支持单独为某个布局设置状态改变的,比如很多同学提到的我一个 listview 的数据没有获取到,fun initPage(targetView: Any),这个 targetView 你只需要设置成你的 listview 或者包裹你 listview 的 parent 布局就 OK 了,具体原理可以看下面的代码解析啊,遍历获取索引,然后记录索引值....项目中我们经常会用到的加载数据,加载完数据后显示内容,如果没有数据显示一个空白页,这是如果网络错误了显示一个网络错误页,自定义一个 PageLayout。绪论Android 中经常使用一个空白页和网络错误页用来提高用户体验,给用户一个较好的感官,如果获取到的数据为空,那么会显示一个空白数据页,如果在获取数据的过程中网络错误了,会显示一个网络异常页,像最近比较火的某东这样,见下图。网上也有一些开源的组件,大部分都是自定义继承某个布局在 xml 中让其作为跟布局,然后将自己的内容布局添加进去,效果也都不错,但是个人总觉得稍微有些麻烦,不是那么灵活,n 多个 xml 布局都去定义,写的心烦,所以有了今天的主角。 思考实现的思路实际上是和上面说的一样,只不过换了一种方式,我们手动获取到 contentView,将它从 DecorView 中移除,然后交给 PageLayout 取管理。当时考虑的时候就是不想在每个 xml 中去写页面切换的布局,那么我们可不可以用 Java 代码去控制?带着下面几个问题一起来看一下。1.自定义一个布局让其作为跟布局2.提供切换加载 loading、空白页 empty、错误页 errror、内容页 content功能3.怎么让其取管理上边的四个页面?4.contentView 怎么添加?5.如果我想切换的跟布局不是个 Activity 或者 Fragment 怎么办?6.因为切换页面状态的功能一般都是一个 APP 统一的,那么可不可以一键配置呢?实现1.代码设计首先我们定义 PageLayout 继承 FrameLayout 或者 LinearLayou 或者其他的布局都可以,然后我们需要提供切换四个布局的功能,当然如果支持自定义就更好了,还有状态布局里面的一些属性,还方便一键配置,所以最后采用了 Builder 模式来创建,使用方式就和 Android 里面的AlertDialog一样,通过 Builder 去构建一个 PageLayout。最后的样子是长这样的:方法注释showLoading()显示 loadingshowError()显示错误布局showEmpty()显示空布局hide()显示内容布局BuildersetLoading()setLoadingText()setError()setDefaultLoadingBlinkText()setEmpty()setLoadingTextColor()setDefaultEmptyText()setDefaultLoadingBlinkColor()setDefaultEmptyTextColor()setDefaultErrorText()setDefaultErrorTextColor()setEmptyDrawable()setErrorDrawable()默认样式PageLayout.Builder(this)                 .initPage(ll_default)                 .setOnRetryListener(object : PageLayout.OnRetryClickListener{                     override fun onRetry() {                         loadData()                     }                 })                 .create()自定义样式PageLayout.Builder(this)                 .initPage(ll_demo)                 .setLoading(R.layout.layout_loading_demo)                 .setEmpty(R.layout.layout_empty_demo,R.id.tv_page_empty_demo)                 .setError(R.layout.layout_error_demo,R.id
简介 Symphony([ˈsɪmfəni],n.交响乐)是一个现代化的社区平台,因为它: 实现了面向内容讨论的论坛 包含了面向用户分享、交友、游戏的社交网络 集成了聚合独立博客的能力,共建共享优质资源 并且 100% 开源 欢迎到 Sym 官方讨论区了解更多。另外,如果你需要搭建一个企业内网论坛,请使用 SymX。 动机 Sym 的诞生是有如下几点原因: (正版) 很多系统界面上仍然保持着老式风格,远远没有跟上时代发展的脚步,它们没有创新、好玩的特性,缺少现代化的交互元素和用户体验 大部分系统是从程序员的角度进行设计的,没有考虑实际的产品、运营需求,这类系统功能过于简陋、细节不够精致、缺乏长期维护 另外,我们正在探索新的社区模式,实现独奏(Solo)与协奏(Symphony)相结合的社区新体验 (野版) 万能的 GitHub 上连个能用的 Java 社区系统都不到,Sym 填补了这个宇宙级空白 做最 NB 的开源社区系统,预计几年以后 82% 的社区都将是 Sym 搭建的 作者技痒,炫技之作,Ruby/Python/Node.js/(特别是)PHP 怎么能比得过 Java 案例 个人维护: 黑客派 宽客网 贵州IT 超级产品经理 Titandb 学习主站 呆萌狮 - Demo's 公司维护: 四方环视 如果你也搭建好了,欢迎通过 Pull Request 将你的站点加到这个列表中 :-p 功能特性 具体功能点细节可浏览 Sym 功能点脑图,下面列出了 Sym 的主要特性,说明 现代化 的由来。 好用的编辑器 Markdown:支持 GFM 语法以及一些扩展语法 格式调整:粗体、斜体、超链接、引用、列表等可以通过工具栏按钮,同时也支持快捷键 文件上传:支持复制粘贴或者拖拽上传图片;支持上传普通文件;对 MP3 会使用在线播放器进行渲染 剪贴板处理:自动将复制的内容转换为 Markdown 格式;外链的图片自动上传站内 @用户:根据用户名自动补全,支持快捷键 Emoji:支持大部分主流 Emoji 表情,快捷键自动补全 数学公式:支持 LaTex 数学公式渲染 数据暂存:支持本地浏览器暂存数据,避免意外情况导致编辑内容丢失 智能、灵活的信息架构 传统的节点式社区要求帖子必须 分类 到某一个节点下,信息架构方式属于自上而下。Sym 不是自上而下的节点式信息架构,帖子不需要固定分类,通过标签 聚合 到某个领域下。 标签:根据帖子内容智能抽取关键字进行标签自动补全,一篇帖子关联多个标签。标签和标签之间以带边权重的图结构进行描述,方便进行相关计算 领域:一个领域下包含了多个标签,通过标签将帖子自动聚合到具体领域,随时可以通过增减关联标签从而达到调整领域范围,最终聚合出适合的帖子列表 满足多样化的发帖需求 目前支持 4 中帖子类型,满足不同用户的偏好: 普通帖子:提问或分享对别人有帮助的经验与见解 思绪:写作过程的记录与重放,文字版的沙画表演 (?) 小黑屋:邀请好友在私密空间中进行交流 同城广播:发起你所在城市的招聘、Meetup 等 另外,所有帖子都可以设置 打赏区 ,打赏区可以放置一些“珍藏”内容,只有打赏后的用户才能浏览。打赏区编辑器同样支持 Markdown、Emoji 和文件上传等特性。打赏区支持内容更新,并可以随时调整打赏积分值。 对于测试帖,可以使用 Sandbox 机制:带有 Sandbox 标签的帖子将视为测试帖,不会显示在首页或是某领域内,只会展现在发帖者自己的帖子列表中。 人性化的回帖交互 实时呈现:回帖提交后其他浏览者可以不刷新页面就实时看到你的回帖 随时滚动:浮出式回帖编辑器方便回帖者随时滚动屏幕查看其他内容,不必担心焦点丢失 真正的回复:回复是针对回帖而言的,而 @ 是针对用户而言的,@ 是提及不是回复,很多系统都没有考虑到这一点。回复/引用可以在当前位置进行展开浏览,也可以跳转到回帖处,并支持跨分页跳转 智能机器人:回帖时可以让机器人也参与到讨论中来,活跃气氛的同时说不定机器人真的能解决一些问题呢 用户个性化设置 用户可以自己设置很多参数以满足个性化需求: 帖子列表浏览分页每页条目数 回帖浏览模式:传统(按发布时间升序,无实时推送刷新);实时(按发布时间降序,实时推送新回帖) 头像浏览模式:原图(支持 gif 动图);静态图 Chrome 通知/邮件订阅/键盘快捷键开关 设置常用 Emoji,方便发布内容时快速插入表情 除了功能个性化配置项,还有很多隐私项开关: 是否公开帖子/回帖列表 是否公开

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧