使用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 + Ajax调用webService实例代码(asp.net)
Aug 27 Javascript
js中使用replace方法完成某个字符的转换
Aug 20 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 Javascript
jquery ztree实现树的搜索功能
Feb 25 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
Nov 16 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
Jun 15 Javascript
在Vue中如何使用Cookie操作实例
Jul 27 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
May 03 jQuery
微信小程序内拖动图片实现移动、放大、旋转的方法
Sep 04 Javascript
Vue中的methods、watch、computed的区别
Nov 26 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
Jun 24 Javascript
微信小程序图片加载失败时替换为默认图片的方法
Dec 09 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 函数语法介绍一
2009/06/14 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
js中数组排序sort方法的原理分析
2014/11/20 Javascript
JS的数组迭代方法
2015/02/05 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
vue-star评星组件开发实例
2018/03/01 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
python实现爬虫下载美女图片
2015/07/14 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
业务部经理岗位职责
2014/01/04 职场文书
班组长岗位职责
2014/03/03 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
护士找工作求职信
2014/07/02 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
2014年检验员工作总结
2014/11/19 职场文书
2014年环保工作总结
2014/11/26 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python
mysql中between的边界,范围说明
2021/06/08 MySQL