从使用ajax调用获取的数据加载图表
loading chart from data fetched using ajax call
我使用jqPlot javascript库(http://www.jqplot.com/)在我的一个应用程序中的图形和图表。
在我的应用程序中,有5-6个页面使用了这个库。但我想在这里讨论一个特殊的情况。在1页,我正在加载3个图表。这三个图表的数据是从数据库表中填充的。
每个图表都有不同的查询集。因此,每个图表的填充数据也不同。
一旦我填充了数据,我必须在将其输入到图表之前处理它。
问题是什么呢? 我所面临的问题是,它需要大量的时间页面渲染浏览器(这是非常明显的,因为首先它将形成查询,然后对数据库表进行查询,获取数据,处理数据,并给出图表)
我的一个朋友建议使用ajax实现以下事情。我真的很喜欢他的解决方案。
这就是我要做的:
我会创建一个页面,它将加载jqPlot库所需的所有js/css文件。该页面将有3个部分,我将在其中放置一些GIF图像,表示正在进行某些进程(例如ajax-loader.gif)
一旦页面被加载,它将触发3个ajax调用,一次一个,来获取每个图表。
我的问题是我如何从ajax调用收到的数据加载图表?
jqplot以以下方式放置数据并创建图表(参见下面的示例)
<script class="code" type="text/javascript">
$(document).ready(function(){
var plot2 = $.jqplot ('chart2', [[3,7,9,1,4,6,8,2,5]], {
// Give the plot a title.
title: 'Plot With Options',
// You can specify options for all axes on the plot at once with
// the axesDefaults object. Here, we're using a canvas renderer
// to draw the axis label which allows rotated text.
axesDefaults: {
labelRenderer: $.jqplot.CanvasAxisLabelRenderer
},
// An axes object holds options for all axes.
// Allowable axes are xaxis, x2axis, yaxis, y2axis, y3axis, ...
// Up to 9 y axes are supported.
axes: {
// options for each axis are specified in seperate option objects.
xaxis: {
label: "X Axis",
// Turn off "padding". This will allow data point to lie on the
// edges of the grid. Default padding is 1.2 and will keep all
// points inside the bounds of the grid.
pad: 0
},
yaxis: {
label: "Y Axis"
}
}
});
});
</script>
由于您使用的是jQuery,因此您将在页面加载后使用jQuery Ajax方法来获取图表数据。
在您的success
函数中,您的JS代码(在浏览器上)接收来自服务器的数据。一旦你有了数据,调用$.jqplot
——传入你刚刚收到的数据。
最初显示繁忙的gif,只需使用img元素作为chart2
div的静态内容,该div稍后将成为图形的容器。
一些技巧:
-
有些浏览器在运行js程序时不能很好地处理gif动画。所以你可能想尝试文本消息("Loading chart…")除了旋转的gif。——或者更新短信。例如从"从服务器获取图表数据"开始,然后在调用
success
函数后更新为"处理图表数据"。 -
与其一次启动所有3个Ajax调用,不如尝试让第一个图表的
success
函数启动第二个Ajax调用。(除了图表数据)
如果你有Ajax调用的问题,谷歌的例子,问一个单独的问题,如果你仍然有问题。
- 将HTML表格导出到excel时,无法将数据加载到excel文件中
- 如何将本地json数据加载到Extjs数据模型中
- FancyTree JS+Backbone.JS-将数据加载到FancyTree时出现问题
- 将数据加载到使用JSON返回的表单字段时出现问题
- 将基本CSV数据加载到D3
- 如何将JSON数据加载到Jqgrid中
- 点击事件时将新的JSON数据加载到Angular中
- 如何使用输入数据加载新的extjs图表
- 读取外部local.txt文件以将数据加载到数组中
- 将数据加载到地图上的更好解决方案
- 将谷歌地理编码(从url)数据加载到javascript变量中
- 按钮在第一次成功的 ajax 数据加载后不起作用
- Jquery 工具提示未随 AJAX 数据加载一起显示
- 将 json 数据加载到 CycleJS 应用程序中
- 将图像数据加载到Angularjs中
- 页面加载前的Angular JS数据加载
- 将数据加载到存储后,Extjs组合框为空
- 将从服务器获取的数据加载到输入文本表单中
- 从 txt 加载数组,将数据加载到 html 中
- 如何将PostgreSQL数据加载到HTML/JS中