使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法


Posted in Javascript onNovember 26, 2015

eval函数可以把一些处理过程序代码进行解析从而达到可以执行的一个状态,查了很多帖子,jqchart插件做折线图时,处理返回数据时全都是eval,但我怎么也弄不出来,后来发现:

1、根本不需要eval处理,直接截取字符串即可(返回值要拼接好);

2、处理好的字符串放进series的data里要加上[];

下面是代码:

html页面<body>标签里面只放了一个<div id="jqChart" style="width: 500px; height: 300px;"></div>;

<script>里面
<script type="text/javascript" src="jquery.1.8.2.js"></script>
<script type="text/javascript" src="jquery-jqChart-min.js"></script>
<script type="text/javascript">
$(function () {
 $.get("tgajax.php",function(data){
  var dom = data.substring(0,data.length-1);//主要是对返回数据的处理,后面很明显多了一个","
  //var dom = eval('(' + dom + ')'); 
  //alert( dom);
 $('#jqChart').jqChart({
  title: { text: '线形图示例' },
  axes: [
   {
    location: 'left',
    minimum: 1,
    maximum: 10,
    interval: 1,
   }
  ],
   series: [
   {
    type: 'line',
    title:'上海',
    markers: null,//拐点不用圆点标示 
    strokeStyle: 'blue' , 
    data: [['json', 1], ['per', 9], ['perter', 3]]
   },
   {
    type: 'line',//line,Column
    title:'北京',
    strokeStyle: 'red' , 
    data:[dom]
   },
   ]
  }); 
});
});
</script>

后台处理页面我就用简单的php弄了,别的也不会

<?php
include ("configaz.php"); //数据库连接在另一个文件内,这里就不弄了
 $sql="select sid,sname,sprice,count(sprice) as pricenum from shangpin group by sname";
 $query=mysql_query($sql);
 $row=mysql_fetch_array($query);
 while($row=mysql_fetch_array($query)){
 $pricenum=$row['pricenum'];
 $sname=$row['sname'];
 } 
 echo $str .= "['".$sname."',".$pricenum."],";//拼接字符串,按照jqChart要求的字符串格式,当然用数组更好,可惜不怎么会

肯定还有更好的方法 只是我刚开始学,慢慢摸索

相信解决办法不止以上所述,肯定还有更好的解决办法,欢迎大家共同学习进步。

ps:ajax读取数据,使用jqchart显示图表

最近项目中需要显示出图表效果,原来收集到的图表插件终于有用武之地了。

但是和jqchart对比,还是有很多不同之处的。

实现效果:

使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法

我就对jqchart进行了重新编写。

首先要解决的是不显示x轴和y轴:

//各DIV作成 
     // 取消标题显示 
     /* 
     this.titleBox//Title 
      =this.mkBoxElement('T', 
       this.op.titleLeft,this.op.titleTop 
      ).appendTo(this.jQcanvasBox) 
      .css('width',this.op.width-this.op.titleLeft)//fix for safari3 2007.12.4 
      .get(0); 
     */ 
     // 取消y轴数字显示 
     /* 
     this.scaleYBox//Y?スケ?ル 
      =this.mkBoxElement('Y', 
       this.op.scaleYLeft,this.op.scaleYTop 
      ).appendTo(this.jQcanvasBox).get(0); 
     */ 
     // 取消x轴分类显示 
     /* 
     this.scaleXBox//X?スケ?ル 
      =this.mkBoxElement('X', 
       this.op.scaleXLeft,this.op.scaleXTop 
     ).appendTo(this.jQcanvasBox).get(0); 
     */

其次,对于拐点的文字,原来显示是相应的data值,现在需要显示的是对应的x轴名称:

if( x <= op.width){ 
       var dx=x-op.paddingL,dy=y-op.paddingT; 
       var dxx = i<=0 ? (dx+op.labelDataOffsetX - 5 + 'px'):( dx+op.labelDataOffsetX - 20 + 'px'); //坐标点x轴偏移 
       var dyy = i%2 ? (dy+op.labelDataOffsetY - 25 + 'px'):(dy+op.labelDataOffsetY - 5 + 'px'); //坐标点y轴偏移 
       it.wrtText( 
        //dx+op.labelDataOffsetX - 20 + 'px', 
        dxx, 
        //dy+op.labelDataOffsetY - 10 + 'px', 
        dyy, 
        //op.rows[i],  // pre: 坐标点data值 
        op.txtpointers[i], // cychai:坐标点文字 
        op, 
        "#jQchart-data-D-"+op.id 
       ).css('color',(op.data.length==1)?'#333':strokeStyle) 
       .css({"width":"100px","font-size":"12px"});  // cychai:样式控制

使用默认的数据可以显示出来了。接下来就是和开发的协作了。

我希望可以使用ajax异步获取数据,然后在前台显示。

这里,我使用了一个示例页面chartdata.html, 即需要的数据页

[{labelX : ["外观设计","便携性","易用性","电池待机","摄像功能","变焦"],data :[[5,7,2,3,9,4]]}] 

在前台,我通过ajax请求该页面,对返回的json数据进行处理,传递给chartSetting:

$(function(){ 
 $.ajax({ 
  url: "chartdata.html", 
  type: "GET", 
  success: function(cdata){ 
   showDDChart(cdata); 
  } 
 }); 
 function showDDChart(cdata){ 
  var dd_chart = eval(cdata)[0]; 
  var chartSetting={ 
   config : {  
    title : "",  
    titleLeft: 70,  
    labelX :dd_chart.labelX,  
    //labelX :["外观设计","便携性","易用性","电池待机","摄像功能","变焦"], 
    scaleY : {min: 0,max:10,gap:2}, 
    width: 300+25,  
    height: 125+50,  
    paddingL : 10,  
    paddingT : 10  
   },  
   //data: [[5,3,1,8,4,9]] 
   data :dd_chart.data 
  };  
  $('#canvasMyID').jQchart(chartSetting); 
 } 
});

完整的html页面:

<head> 
<!--[if IE]> 
<mce:script src="excanvas-compressed.js" mce_src="excanvas-compressed.js" type="text/javascript" ></mce:script> 
<![endif]--> 
<mce:script src="http://jsgt.org/lib/jquery/plugin/jqchart/sample/v003/lib/jquery-1.2.3.min.js" mce_src="http://jsgt.org/lib/jquery/plugin/jqchart/sample/v003/lib/jquery-1.2.3.min.js" type="text/javascript"></mce:script> 
<mce:script src="jquery.jqchart.js" mce_src="jquery.jqchart.js" type="text/javascript" charset="utf-8"></mce:script> 
</head><body> 
<canvas id="canvasMyID" height="200"></canvas> 
<mce:script type="text/javascript"><!-- 
$(function(){ 
 $.ajax({ 
  url: "chartdata.html", 
  type: "GET", 
  success: function(cdata){ 
   showDDChart(cdata); 
  } 
 }); 
 function showDDChart(cdata){ 
  var dd_chart = eval(cdata)[0]; 
  var chartSetting={ 
   config : {  
    title : "",  
    titleLeft: 70,  
    labelX :dd_chart.labelX,  
    //labelX :["外观设计","便携性","易用性","电池待机","摄像功能","变焦"], 
    scaleY : {min: 0,max:10,gap:2}, 
    width: 300+25,  
    height: 125+50,  
    paddingL : 10,  
    paddingT : 10  
   },  
   //data: [[5,3,1,8,4,9]] 
   data :dd_chart.data 
  };  
  $('#canvasMyID').jQchart(chartSetting); 
 } 
}); 
// --></mce:script> 
</body> 
</html>

OK,大功告成! 完整示例我会放到我的资源里。

好久都没有用jquery ajax了,拼json数据都有些生疏了。还是喜欢开发这种有逻辑性的工作....

Javascript 相关文章推荐
jquery与google map api结合使用 控件,监听器
Mar 04 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
javascript中Object使用详解
Jan 26 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
Mar 17 Javascript
layer弹出层框架alert与msg详解
Mar 14 Javascript
vue快捷键与基础指令详解
Jun 01 Javascript
js封装成插件的步骤方法
Sep 11 Javascript
vue-cli如何引入bootstrap工具的方法
Oct 19 Javascript
vue 插值 v-once,v-text, v-html详解
Jan 19 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
Nov 05 Javascript
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
JAVASCRIPT代码编写俄罗斯方块网页版
Nov 26 #Javascript
Bootstrap每天必学之按钮
Nov 26 #Javascript
学习JavaScript设计模式(多态)
Nov 25 #Javascript
创建自己的jquery表格插件
Nov 25 #Javascript
一不小心就做错的JS闭包面试题
Nov 25 #Javascript
javascript Slip.js实现整屏滑动的手机网页
Nov 25 #Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 #Javascript
You might like
windows7下php开发环境搭建图文教程
2015/01/06 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
教大家制作简单的php日历
2015/11/17 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python使用any判断一个对象是否为空的方法
2014/11/19 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
python读取各种文件数据方法解析
2018/12/29 Python
Django框架模板介绍
2019/01/15 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
英国袜子店:Sock Shop
2017/01/11 全球购物
抽象类和接口的区别
2012/09/19 面试题
干部现实表现材料
2014/02/13 职场文书
个人向公司借款协议书
2014/10/09 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
MySQL时区造成时差问题
2022/04/13 MySQL