我有一个令人费解的情况。
我有一个包含几个柱形图的页面。在此页面上,还有一个链接,单击该链接构建表单并将数据发送到服务器,后者将发回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 -->
如果我刷新(重新加载)页面,每次生成文档都没有问题。
有人能告诉我如何解决这个问题吗?
谢谢和问候。
答案 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());
});