Coldfusion 有没有办法防止cfchart强迫js进入响应内容?

Coldfusion 有没有办法防止cfchart强迫js进入响应内容?,coldfusion,coldfusion-2016,Coldfusion,Coldfusion 2016,更新:报告错误,感谢投票 我们正在从ColdFusion 10迁移到2016年。看来唯一的兼容性障碍是制图系统的变化。对于完整页面请求,这通常是好的,但在某些情况下,我们会生成png格式的图表,捕获生成的内容,去掉一些同时生成的js,并将结果以json形式返回,作为页面更新的一部分。我们遇到的一个问题是,CF强制请求响应中的javascript与输出的实际内容分开,从而导致json响应无效 js似乎是使用类似于cfhtmlhead标记的方法插入的,它在响应中查找head标记,如果找到,则在那里插

更新:报告错误,感谢投票

我们正在从ColdFusion 10迁移到2016年。看来唯一的兼容性障碍是制图系统的变化。对于完整页面请求,这通常是好的,但在某些情况下,我们会生成png格式的图表,捕获生成的内容,去掉一些同时生成的js,并将结果以json形式返回,作为页面更新的一部分。我们遇到的一个问题是,CF强制请求响应中的javascript与输出的实际内容分开,从而导致json响应无效

js似乎是使用类似于cfhtmlhead标记的方法插入的,它在响应中查找head标记,如果找到,则在那里插入代码,否则它只是将代码前置到整个请求中。对于应该是json的响应,这显然是一个问题

在图表生成之前,我已尝试调用刷新,但在命中cfchart代码时出现错误“ColdFusion无法将指定的文本添加到输出流。这可能是因为您已经在模板中使用了CFFLUSH标记,或者缓冲输出已关闭”

关于如何告诉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标记中使用的图表来说,这甚至是一个问题(只需将cfsavecontent标记替换为cfdocument filename=“test.pdf”即可进行测试)。图表被添加到磁盘上的文档中,但js在请求响应中得到输出,从而终止了我们的ajax请求,这些请求旨在返回下载链接和其他数据。

找到了一种解决方法,即在线程中执行图表生成。然后,输出仅为基础图表内容,而不是标题内容。

这可以通过以下选项之一解决,用于重置CF自动插入到
中的内容:




这些方法没有文档记录(因此可能在将来的版本中更改,尽管不太可能),并且这些方法不太可能移植到其他CFML引擎。

可以肯定,这只是“按设计工作”。远离内置设备的原因之一。说得好。我们几乎避免了CF的所有与UI相关的功能。图表是我们实际使用的一个功能。多年来一直在寻找替代品,但尚未触发切换。此外,我不会说它的工作原理与设计的一样简单,因为在请求中不打算输出图表内容的情况下,头部区域仍然有javascript输出。例如,您可以使用名称调用cfchart,然后使用该名称保存图表图像文件。即使该图表永远不会在请求中返回,javascript代码仍然会以前缀结束。
<cfcontent reset="true" resethead="true">
<cfset getPageContext().getCFOutput().clearHeaderBuffers()>