更新:报告的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请求失效,这意味着要恢复下载链接和其他数据。
很确定这只是“按设计工作”。远离内置_cfblah_材料的原因之一。 [ColdFusion UI正确的方式](https://github.com/cfjedimaster/ColdFusion-UI-the-Right-Way) –
好点。我们已经避免了几乎所有CF的UI相关功能。图表是我们实际使用的一件事情。看着多年来的替代品,但尚未拉动切换的触发器。 –
另外我不会说它是按照简单的事实设计的,即在图表中没有要输出内容的情况下,头部区域仍然会有javascript输出。例如,您可以使用名称调用cfchart,然后使用名称来保存图表图像文件。即使图表从不打算在请求中返回,javascript代码仍然会以前缀结尾。 –