我们决定在模式对话框中使用cfWindows。这是无法更改的,因此“使用其他框架”的答案和评论无法解决问题。
当我们为IP地址打开了调试功能,并且调试信息在正常页面上显示得很好时,cfWindows中什么也没有显示。今天,我尝试重新创建调试信息,然后将其手动写到窗口HTML中。我首先在onRequestEnd中使用以下代码,在正常调用的页面上可以正常工作:
<cfset tempFactory = createObject("java", "coldfusion.server.ServiceFactory")>
<cfset tempCfdebugger = tempFactory.getDebuggingService()>
<cfset qEvents = tempCfdebugger.getDebugger().getData()>
在花了一些时间格式化所需的输出之后,我终于在cfWindow上尝试了此操作。但是,我在第三行代码中收到以下错误:
Detail Its possible that a method called on a Java object created by CreateObject returned null.
ErrNumber 0
Message Value must be initialized before use.
这意味着不仅将CF设置为不在cfWindows中显示调试信息,而且在cfWindows的情况下,提供调试信息的Java元素也无法正常工作。我对底层Java知之甚少,而我发布的代码是前一段时间从CF博客获取的,因此我不确定如何解决此问题。
是否可以获取cfWindow中调用的页面的调试信息?如果是这样,怎么办?
编辑
为了遵循注释中的建议,我尝试在自己的浏览器窗口中打开CFWindow模板。调试信息显示正常。然后,我尝试CFDumping上面列出的三行中每行的结果。前两个工作。 “ tempCfdebugger”变量确实包含一个名为“ getDebugger()”的函数。问题似乎出在CFWindow中调用该函数时。服务器必须以某种方式不同地解释CFWindow请求。
除了连接到ServiceFactory之外,还有其他方法来获取此调试信息吗?
最佳答案
Cfwindow和其他AJAX功能更难调试(不仅仅是ColdFusion AJAX)。对于cfwindow,可以将其添加到URL:
?cfdebug
有关此操作方式/功能的更完整说明,请点击此处:
http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec10e40-8000.html
我还建议您了解如何使用Firebug。它确实需要花费一些时间来学习,但是对于其他项目(标准jQuery / AJAX)将非常有用。非常值得花时间学习。
您将获得有关此类开发的其他平台/策略的评论。我已经被Adobe内部功能烧死了。 cfform,cfinput等。我发现学习jQuery很痛苦,但是当我升级到新版本的ColdFusion时,它克服了Adobe给我带来的痛苦。我也遇到了cfwindow的一些浏览器兼容性问题。
更新:
我认为,通过向OnRequestEnd()添加代码,您将破坏CF AJAX调用的正常操作。阅读我对Ben Forta博客有关我遇到的麻烦的评论(打开此链接后搜索jibben)。
http://forta.com/blog/index.cfm/2007/6/4/ColdFusion-Ajax-Tutorial-4-Partial-Page-Updates
简短版本:使用OnRequestEnd()添加内容输出将中断CF AJAX调用,因为其中许多调用都需要JSON或其他格式化的数据。向此函数添加简单的“ hello
”会将其附加到数据流,并破坏预期的格式。
我建议将调试转储添加到cfwindow在source属性中调用的页面。
另外请注意:我正在添加它,因为它可能会有所帮助。 CF还有另一个称为_cf_nodebug的URL /查询字符串变量。如果为false,则打开调试输出。