2017-10-13 33 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

找到了一种解决方法,即在线程中执行图表生成。输出结果只是基本图表内容而不是头部内容。

相关问题