使用highcharts.js的仪表板
我正在尝试使用highcharts.js(一个页面上显示多个图表)构建一个仪表板,这些图表的数据通过ajax获取。每个图表都可以独立刷新。最初,当我试图让它工作时,我得到了错误#16,我发现HighCharts.js被包括在内,ajax响应再次发送回HighCharts,因此HighCharts抛出了这个错误 为了避免这种情况,我添加了js代码来检查是否已经定义了HighCharts,如果已经定义了HighCharts,我将其设置为null使用highcharts.js的仪表板,highcharts,highstock,Highcharts,Highstock,我正在尝试使用highcharts.js(一个页面上显示多个图表)构建一个仪表板,这些图表的数据通过ajax获取。每个图表都可以独立刷新。最初,当我试图让它工作时,我得到了错误#16,我发现HighCharts.js被包括在内,ajax响应再次发送回HighCharts,因此HighCharts抛出了这个错误 为了避免这种情况,我添加了js代码来检查是否已经定义了HighCharts,如果已经定义了HighCharts,我将其设置为null if(window.Highcharts){
if(window.Highcharts){
window.Highcharts = null;
}
这似乎解决了问题,但我现在看到,当我刷新一个图表时,仪表板上的其他图表似乎存在一些渲染问题-其他图表的一部分似乎已被剥离
请让我知道我所做的是否正确,也请让我知道我可以避免加载HighCharts的更好方法是它已经加载。假设您可以控制正在渲染的HTML,则您需要这样做
function buildChart(func) {
if (window.Highcharts === undefined) {
console.log("Highcharts is not loaded, fetching...");
$.getScript("http://code.highcharts.com/highcharts.js", function () {
alert("HighCharts was loaded");
func(); // build chart
});
}
else {
console.log("HighCharts was already loaded");
func(); // build chart
}
}
// test
buildChart(function () {
// build chart
console.log("Read to build chart with:", window.Highcharts);
})
然而,这个简单的例子不能满足highcharts仍在加载时的并发请求。所以对于像这样的条件加载,我会考虑使用一个库,比如,or,它可以为您处理这些依赖关系。然后,您可以随时在组件中包含HighCharts脚本,并且只加载一次。为什么要在每个跨度中加载HighCharts?文档加载时,只需加载一次 Highcharts不需要在每次刷新图表时加载…它已经在那里了
要通过ajax刷新各个图表,只需返回该图表数据的json对象,并使用加载页面时设置的现有选项重新初始化图表。当您说“数据由ajax获取”时,您是指包含标记的HTML Snipbit吗?在这种情况下,你为什么不把数据发回去呢?如果您必须发回HTML和脚本标记,请查看处理这种依赖关系的RequireJS。问题是我无法区分页面加载和图表刷新,因此这种方法对我不起作用。你能建议一些在客户端使用js处理这个问题的方法吗?我需要更多的信息-你能详细说明一下你是如何加载/刷新图表的吗?或者您可以共享代码吗?@cirrus在刷新图表区域()时,图表区域()将已经有HighCharts.js,刷新尝试再次包含HighCharts.js,这将导致错误#16。正如我前面提到的,如果已经定义了highcharts,我试图通过设置window.highcharts=null来克服这个问题,但这会导致渲染问题。如果我刷新一个图表,其他图表将被剥离(部分渲染)。如果有更好的办法解决这个问题,请告诉我。还有,在3.0中引入此错误有什么具体原因吗?@user2317558为什么您不能只将highcharts.js作为脚本附加到头部,然后只对特定图表进行线性化?通过ajax,您可以获取数据(即通过JSON或其他方式)并初始化图表。好的,我尝试了您提到的方法-添加了所有位于顶部(位于主体内部)标记的HighCharts。。。现在,当我尝试打开仪表板时,我得到以下错误,这是堆栈跟踪………UncaughtTypeError:undefined不是函数highcharts.src.jsx:6707。。。你能告诉我为什么我会看到这个错误吗?不能不知道你做了什么。是否有一个实时网站,或者你可以创建一个小提琴?顺便提一句为什么您要下载HTML而不仅仅是ajax中的JSON,并将数据传递给highcharts?您记得先包含jQuery吗?请注意,使用RequireJS&setting window的组合。highcharts=null对我们来说是有效的,尽管我们遇到了与使用highcharts的第三方仪表盘引擎的冲突想改用Highstock。这两个引擎似乎无法协同工作,但我们无法控制第三方引擎。此外,他们对海图的使用也没有记录在案。