我有一个页面使用 getJSON 来访问同一域内的 cfc。在开发服务器上一切正常,但在现场却不行。其他 jquery 执行得很好,只是 .getJSON 调用不行。我也尝试过网络上的几个示例,并使用 ajax 而不是 getJSON,但结果总是相同的 - 在测试中很好,但在实时中则不然。
这是我当前用于测试的代码,它是 http://www.christopherchin.com/blog/index.cfm/2010/3/25/HELP-CFCjqueryJSON 中示例的精简版本.
<小时/>索引.cfm:
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
chkUsernameUnique = function(theUsername){
$.getJSON("/jsonTest/mycfc.cfc", {
method: 'chkUsername',
Username: theUsername,
returnformat: 'json'
}, function(isUsernameUnique){
$("#theErrorDivID").html(isUsernameUnique);
});
};
</script>
<input type="text" name="username" id="username" onchange="chkUsernameUnique(this.value);" />
<div id="theErrorDivID"></div>
<小时/>
mycfc.cfc:
<cfcomponent>
<cffunction name="chkUsername" access="remote" returnformat="json" output="false">
<cfargument name="Username" required="true">
<cfset thisRecordCount=4>
<cfreturn thisRecordCount>
</cffunction>
</cfcomponent>
<小时/>
忽略它没有做任何有用的事情,这纯粹是为了测试。在测试服务器上,它会执行应有的操作,并且如果我在框中键入内容,则会显示 4。在肝脏服务器上,它实际上并没有抛出错误,浏览器显示 javascript 正在验证,但什么也没有发生。此时,我认为这可能是服务器上或 ColdFusion 管理中的设置,而不是与代码有关的任何设置,但我什至不知道从哪里开始。任何帮助将非常非常感谢。
<小时/>更新:我现在在 firebug 中看到,在测试服务器上响应是 4.0,但在实时服务器上它是//4.0。额外的斜杠是什么意思?
最佳答案
您很可能在实时服务器上启用了 ColdFusion 的“secureJson”功能。默认情况下,它的作用是通过在 JSON 前面放置两个正斜杠来保护 JSON 输出。其他尝试访问 JSON 的源将仅看到 Javascript 注释 (//),而 ColdFusion 知道该功能已启用,将删除斜杠,然后使用它。
您可以在 Application.cfc (this.secureJson = false)、Application.cfm ( <cfapplication ... secureJson="false" />
) 或 cffunction 标记 ( <cffunction ... secureJson="false">
) 中的函数级别将其关闭。 CF 管理员中还有一个服务器范围的设置。您很可能在测试环境中关闭了此功能,但在生产环境中将其打开。
关于jquery getJSON 对 cfc 的调用可以在测试服务器上运行,但不能实时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6515690/