2014-10-04 24 views
0

我有一個令人費解的情況。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

問題是,在Highcharts.chart數組中,您創建並銷燬了所有圖表。當您撥打getSVG()時,將創建新圖表(重複)並在該數組中可用。現在,一旦圖表被刪除,它與undefined更換,所以出口第一時間可能會後的結果是:

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

解決方案很簡單,只檢查是否chart變量存在:

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

帕維爾,謝謝爲您的輸入!你的意思是說,在第二次導出時,我仍然可以收集所有圖表,但需要使用該「如果測試」跳過未定義? Highcharts.chart中新創建的圖表是否按照它們在頁面上顯示的順序進行放置?謝謝!!! – curious1 2014-10-06 16:09:51

+1

是的,該數組中的順序與它們在頁面上創建的順序相同。是的,你需要使用'if(chart)...'來確保你不會嘗試導出非導出圖表。或者不用'if(chart)',你可以使用if(typeof chart ==='undefined')'。第二個應該更安全。 – 2014-10-07 08:42:47

相關問題