遇到一个奇怪问题,关于HighCharts的全局变量的。

椰果子 2013-07-10 09:40:51
最近在使用HighCharts的图表控件时,遇到了一个奇怪的问题,虽然算是解决了,但是没有搞明白为什么。恳求各位javascript高手不吝赐教。


以下是官网提供的例子,我自己稍微做了下修改,可以正常运行的。

<head runat="server">
<title></title>
<script src="../js/jquery-1.9.1.js" type="text/javascript"></script>
<script src="../js/highChartJs/highcharts.js" type="text/javascript"></script>
<script type="text/javascript">
var chart; //全局变量;

//ajax获取数据并填充到图表中.
function requestData() {
$.ajax({
url: 'testAshx.ashx',
success: function (point) {
var series = chart.series[0], shift = series.data.length > 20; // shift if the series is longer than 20
var x = (new Date()).getTime();
var y = Math.random();
var pt = [x, y];
// add the point
chart.series[0].addPoint(pt, true, shift);

// call it again after one second
setTimeout(requestData, 1000);
},
cache: false
});
}


//以下是载入图表部分;
$(document).ready(function () {
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
defaultSeriesType: 'spline',
events: {
load: requestData
}
},
title: {
text: 'Live random data'
},
xAxis: {
type: 'datetime',
tickPixelInterval: 150,
maxZoom: 20 * 1000
},
yAxis: {
minPadding: 0.2,
maxPadding: 0.2,
title: {
text: 'Value',
margin: 80
}
},
series: [{
name: 'Random data',
data: []
}]
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="container" style="width: 100%; height: 300px;">
</div>
</form>
</body>
</html>



问题就在那个requestData()之中,我把这个函数改成下面的,发现chart的值就为undefined了。我不明白为什么ajax调用后chart就可以识别,但是不用ajax的话,chart就是undefined的。这是javascript的原因还是HighCharts的原因啊,求高手赐教。

function requestData() {
var x = (new Date()).getTime();
var y = Math.random();
var point = [x, y];
var series = chart.series[0], shift = series.data.length > 20; // shift if the series is longer than 20
// add the point
chart.series[0].addPoint(point, true, shift);
// call it again after one second
setTimeout(requestData, 1000);

}


...全文
251 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
KK3K2005 2013-07-15
  • 打赏
  • 举报
回复
你自己看 2个 函数的代码的区别在那里 第一个是 chart = new new Highcharts.Chart({...... 第2个呢 呵呵
椰果子 2013-07-15
  • 打赏
  • 举报
回复
引用 2 楼 wohuifude123 的回复:
楼主,你新写的那段函数里面chart根本没有定义,当然是undefined 就拿你那函数里的 var y = Math.random(); 系统知道这个y是随机数 而你仔细看看chart 这个是干什么的,你知道他是干什么呢,但是你没写出来啊 写法就错误了
我在外面写了个 var chart; //全局变量; 我想用这个全局变量,在函数里面引用,这里不行吗?为什么引用不了那个全局变量?
椰果子 2013-07-12
  • 打赏
  • 举报
回复
顶一下求高手。
wohuifude123 2013-07-12
  • 打赏
  • 举报
回复
楼主,你新写的那段函数里面chart根本没有定义,当然是undefined 就拿你那函数里的 var y = Math.random(); 系统知道这个y是随机数 而你仔细看看chart 这个是干什么的,你知道他是干什么呢,但是你没写出来啊 写法就错误了

87,915

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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