2017-10-13 96 views
1

更新:報告的bug,票讚賞https://tracker.adobe.com/#/view/CF-4200017有沒有辦法阻止cfchart強制js進入響應內容?

我們正在從ColdFusion的10遷移到2016年。這似乎與兼容性的唯一的障礙是在製圖系統的變化。對於完整頁面請求,這通常很好,但在某些情況下,我們會以png格式生成圖表,捕獲生成的內容並去除一些同時生成的js,並將結果作爲頁面更新的一部分返回給json。我們遇到的問題是CF迫使請求響應中的javascript與輸出的實際內容分離,導致json響應無效。

看起來JS正在使用類似於cfhtmlhead標記的方法插入,它在頭標記的響應中查找,如果找到則在其中插入代碼,否則它只是將代碼預先安排到整個請求。對於應該是json的迴應,這顯然是一個問題。

我已經在圖表生成之前嘗試調用flush,但隨後出現錯誤「ColdFusion無法將您指定的文本添加到輸出流中,這可能是因爲您已經在模板中使用了CFFLUSH標記或緩衝輸出關閉「,當cfchart代碼被擊中時。

有關如何告知CF將代碼內聯或重置計劃插入請求輸出的內容的任何建議?

例子:

<cfsavecontent variable="ignore"> 
<cfchart format="png"> 
    <cfchartseries type="Bar" label="Numbers"> 
     <cfchartdata item="First" value="1"> 
     <cfchartdata item="Second" value="2"> 
    </cfchartseries> 
</cfchart> 
</cfsavecontent> 

<cfcontent reset="true" /> 
test 

結果:

<script type="text/javascript">/* <![CDATA[ */_cf_loadingtexthtml="<img alt=' ' src='/cf_scripts/scripts/ajax/resources/cf/images/loading.gif'/>"; 
_cf_contextpath=""; 
_cf_ajaxscriptsrc="/cf_scripts/scripts/ajax"; 
_cf_jsonprefix='//'; 
_cf_websocket_port=8579; 
_cf_flash_policy_port=1243; 
_cf_clientid='1D0DA2C606EC323ABBECA5B29A016CF0';/* ]]> */</script><script type="text/javascript" src="/cf_scripts/scripts/ajax/messages/cfmessage.js"></script> 
<script type="text/javascript" src="/cf_scripts/scripts/ajax/package/cfajax.js"></script> 
<script type="text/javascript" src="/cf_scripts/scripts/chart/cfchart-server.js"></script> 

test 

它甚至在cfdocument標籤中使用(只更換cfdocument文件名= 「檢驗.pdf」 測試cfsavecontent標籤圖表的問題)。圖表被添加到磁盤上的文檔中,但是然後js在請求響應中獲取輸出,從而導致我們的ajax請求失效,這意味着要恢復下載鏈接和其他數據。

+1

很確定這只是「按設計工作」。遠離內置_cfblah_材料的原因之一。 [ColdFusion UI正確的方式](https://github.com/cfjedimaster/ColdFusion-UI-the-Right-Way) –

+0

好點。我們已經避免了幾乎所有CF的UI相關功能。圖表是我們實際使用的一件事情。看着多年來的替代品,但尚未拉動切換的觸發器。 –

+0

另外我不會說它是按照簡單的事實設計的,即在圖表中沒有要輸出內容的情況下,頭部區域仍然會有javascript輸出。例如,您可以使用名稱調用cfchart,然後使用名稱來保存圖表圖像文件。即使圖表從不打算在請求中返回,javascript代碼仍然會以前綴結尾。 –

回答

0

找到了一種解決方法,即在線程中執行圖表生成。輸出結果只是基本圖表內容而不是頭部內容。

相關問題