【发布时间】:2015-09-01 01:30:39
【问题描述】:
我知道很多人在使用 Ajax 和旧版本的 Coldfusion 时遇到过问题,但我在本地机器上使用 Coldfusion 11 Developer,发现无法在任何情况下使用 Coldfusion 函数将其绑定到CFC,尽管返回的错误并不总是相同。
当 cfdiv 绑定到 CFC 时,我不能使用自动建议 - 但我可以绑定到同一页面上的自动建议数据,包括来自数据库的数据。当我绑定到 CFC 时,CFDebug 中的错误消息总是显示为
“错误:小部件:自动建议姓氏绑定失败,绑定值不是一维字符串数组。 info:http: CFC 调用响应:["Barken","Barnes"] ...
...您可以看到,绑定是一维字符串数组,CFC 生成了它们,但不会将它们返回到调用页面!
我还尝试让 CFC 变得更简单,删除数据库元素并手动创建一个简单的一维字符串数组,但出现与从我的数据库输入时相同的错误。
所以我做了一个更简单的测试,避免使用数据库和数组来测试普通、简单的绑定,不涉及自动建议——只是普通绑定到 CFC(我总是可以成功绑定到同一页面上的数据或 URL。 )
这是最简单的测试代码,还是不行:
<body>
<cfform id="myForm" name="myForm">
Enter your name into the box:<br />
<cfinput type="text" name="myText">
</cfform>
<hr />
Below is a cfdiv container, with a bind to a CFC:<br />
<cfdiv bind="cfc:bindsource.getDivContent({myText})"></cfdiv>
</body>
这是 CFC,名为 bindsource.cfc,与表单页面位于同一文件夹中:
<cfcomponent output="false">
<cffunction name="getDivContent" returntype="string" access="remote" >
<cfargument name="edit">
<cfreturn "Your entered content was: #arguments.edit#">
</cffunction>
</cfcomponent>
在这种情况下,我得到的错误是: 窗口:全局:未捕获的异常:TypeError:无法将 '_289[i]' 转换为对象(http://localhost:8500/CFIDE/scripts/ajax/package/cfajax.js,第 872 行) info:http: CFC 调用响应:“您输入的内容是:William”
(William 是我在主页框中输入的文本。cfajax.js 中的第 872 行是“872 throw new SyntaxError("parseJSON")”
在这个简单的测试中,在我的主页上,无论是在我在文本输入中输入内容之前还是之后,在 cfdiv 的区域中,都会出现“未定义”一词。
有时,如果我在某些测试页面上没有得到 1D array of strings 错误,我会得到 this can't convert to object 错误。
我尝试过的所有示例——不仅仅是我自己的东西,而是我能找到的所有示例——运行,直到出现 Ajax 错误,所以没有其他语法错误。在所有情况下,表单页面加载并运行,CFC 似乎被调用,处理适当 - CFDebug 在调试窗口中向我显示 CFC 的正确输出 - 但随后没有任何内容返回到调用页面。如果我使用 url 绑定或相同的页面绑定,它会这样做 - 使用 CFC,它不会。永远。
当我在传递了方法和参数的直接 URL 中独立测试 CFC 时,它可以工作 - 我得到与 CFC 调用响应相同的结果。
有没有人在 Coldfusion 中使用过 CFC 绑定?我错过了什么还是 CF11 有缺陷?整个事情似乎有点不稳定。我也收到“找不到 CFC”错误,但如果我什么都不做,请关闭,重新启动 - 在会话稍后的某个时间,在重复尝试获取其中一个文件之后,相同文件不会再次发生该特定错误测试工作。
【问题讨论】:
-
我有时将它与版本 9 一起使用,它工作正常。我使用的代码和你的类似。
-
我在 CF11 上测试了你的代码,它运行良好。
-
问题很可能是您正在使用 ColdFusion 客户端功能,这些功能直言不讳、执行不力、过时且功能严重受限。使用像 jQuery 这样的 JS 库会更好。它会更容易更新,并且会为您省去很多麻烦。
-
过去,当我遇到您描述的问题时,是由于在应用程序级别引入了其他 javascript 代码。当您测试此类事情时,请确保您在Applcation.cfc 不会执行任何会干扰您的测试的目录。
-
您是否为站点定义了 CFIDE 和 jakarta 虚拟目录?
标签: ajax coldfusion bind cfc