更新:报告错误,感谢投票https://tracker.adobe.com/#/view/CF-4200017
我们正在从 ColdFusion 10 迁移到 2016。看来兼容性的唯一障碍是图表系统的变化。对于整页请求,这通常没问题,但在某些情况下,我们会生成 png 格式的图表,捕获生成的内容并去除同时生成的一些 js,并以 json 格式返回结果作为页面更新的一部分。我们遇到的一个问题是 CF 强制请求响应中的 javascript 与输出的实际内容分开,导致 json 响应无效。
似乎正在使用 cfhtmlhead 标记之类的方法插入 js,它在其中查找 head 标记的响应,如果找到则在其中插入代码,否则它只是将代码添加到整个请求中。对于应该是 json 的响应,这显然是一个问题。
我已经尝试在图表生成之前调用刷新,但随后出现错误“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 标签中使用的图表甚至是一个问题(只需将 cfsavecontent 标签替换为 cfdocument filename="test.pdf" 进行测试)。图表被添加到磁盘上的文档中,但随后 js 在请求响应中得到输出,杀死了我们的 ajax 请求,这些请求旨在带回下载链接和其他数据。