Highcharts:第二次收集页面上的所有图表会产生错误

时间:2014-10-04 02:43:15

标签: highcharts

我有一个令人费解的情况。

我有一个包含几个柱形图的页面。在此页面上,还有一个链接,单击该链接构建表单并将数据发送到服务器,后者将发回PDF文档:

$('#my-link").click(function(ev) {

        var svgArray=[];
        $(Highcharts.charts).each(function(i, chart){    
            svgArray.push(chart.getSVG()); <!--show error "TypeError: chart is undefined" in Firefox when clicking on it the second time without refreshing the page -->
        });
        var svgJson = JSON.stringify(svgArray); 
        var form = $('#my-form');
        var ele = $('<input name="chartSvgArray" style="display: none" value="' +         $.base64('encode', svgJson) + '">');
        form.append(ele);
        form.submit();

        ev.preventDefault();
});

浏览器能够从服务器获取PDF文档(包含图表),并提示我打开或保存它。在上面我使用了两个Javascript工具。 JSON和.base64 http://www.jqueryscript.net/text/Base64-Decode-Encode-Plugin-base64-js.html

这是我遇到问题的地方。在没有刷新页面的情况下,我再次单击该链接,我在此行中收到错误:

svgArray.push(chart.getSVG()); <!--show error "TypeError: chart is undefined" in Firefox when clicking on it the second time without refreshing the page -->

如果我刷新(重新加载)页面,每次生成文档都没有问题。

有人能告诉我如何解决这个问题吗?

谢谢和问候。

1 个答案:

答案 0 :(得分:1)

问题是在Highcharts.chart数组中,您创建并销毁了所有图表。当您调用getSVG()时,会创建新图表(重复)并在该数组中可用。现在,一旦删除图表,它就会被undefined替换,因此第一次导出后的结果可能是:

Highcharts.charts[] = [ chart1, chart2, undefined, undefined ];

解决方案很简单,只需检查chart变量是否存在:

$(Highcharts.charts).each(function(i, chart){   
    if(chart) svgArray.push(chart.getSVG()); 
});