有没有办法阻止cfchart强制js进入响应内容?

时间:2017-10-13 13:56:12

标签: coldfusion coldfusion-2016

更新:报告错误,投票赞赏https://tracker.adobe.com/#/view/CF-4200017

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

似乎使用像cfhtmlhead标签这样的方法插入js,它在头部标签的响应中查找,如果找到则插入代码,否则它只是将代码添加到整个请求中。对于应该是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 filename =&#34; test.pdf&#34;替换cfsavecontent标签进行测试)。该图表被添加到磁盘上的文档中,但随后js在请求响应中输出,从而终止了我们的ajax请求,这些请求旨在恢复下载链接和其他数据。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

可以使用以下两个选项之一来解决此问题:重置CF自动插入到<head>中的内容:

<cfcontent reset="true" resethead="true">

<cfset getPageContext().getCFOutput().clearHeaderBuffers()>

这些方法尚未记录(因此可能会在将来的版本中进行更改,尽管可能性不大),并且这些方法不太可能移植到其他CFML引擎中。