使用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写的左右轮播图特效
Feb 12 Javascript
jQuery实现的跨容器无缝拖动效果代码
Jun 21 Javascript
AngularJS ng-bind-template 指令详解
Jul 30 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 Javascript
浅谈webpack对样式的处理
Jan 05 Javascript
JS实现将对象转化为数组的方法分析
Jan 21 Javascript
JavaScript箭头函数中的this详解
Jun 19 Javascript
elementUI 动态生成几行几列的方法示例
Jul 11 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
Sep 19 Javascript
vue使用recorder.js实现录音功能
Nov 22 Javascript
原生JS实现记忆翻牌游戏
Jul 31 Javascript
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
php&amp;java(一)
2006/10/09 PHP
自动分页的不完整解决方案
2007/01/12 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
PHP重载基础知识回顾
2020/09/10 PHP
5 cool javascript apps
2007/03/24 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
js处理php输出时间戳对不上号的解决方法
2014/06/20 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python实现简单HTML表格解析的方法
2015/06/15 Python
Python实现包含min函数的栈
2016/04/29 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
详解python中init方法和随机数方法
2019/03/13 Python
python3 下载网络图片代码实例
2019/08/27 Python
python实现网站微信登录的示例代码
2019/09/18 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
Python如何实现线程间通信
2020/07/30 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
预备党员党校学习自我评价分享
2013/11/12 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
售票员岗位职责
2015/02/15 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
python 如何用terminal输入参数
2021/05/25 Python
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python