我有一个页面使用getJSON访问同一域内的cfc。在开发服务器上一切正常,但不是在现场。其他jquery执行正常,而不是.getJSON调用。我也尝试了几个来自网络的例子,并使用ajax而不是getJSON,但结果总是一样的 - 测试时很好,而不是现场。
以下是我目前用于测试的代码,这是http://www.christopherchin.com/blog/index.cfm/2010/3/25/HELP-CFCjqueryJSON处示例的精简版。
index.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。额外的斜杠是什么意思?
答案 0 :(得分:4)
您很可能在实时服务器上启用了ColdFusion的“secureJson”功能。这样做是通过默认情况下在JSON前放置两个正斜杠来保护JSON输出。尝试访问JSON的其他来源只会看到Javascript注释(//),而知道该功能已启用的ColdFusion将删除斜杠然后使用它。
您可以在Application.cfc(this.secureJson = false),Application.cfm(<cfapplication ... secureJson="false" />
)中或在cffunction标记(<cffunction ... secureJson="false">
)的函数级别将其关闭。 CF管理员中还有一个服务器范围的设置。很可能您已在测试环境中关闭此功能,但在生产环境中已启用。
答案 1 :(得分:0)
您在生产CF服务器上启用了secureJSON。我会更新我的开发服务器以匹配它,而不是在生产中关闭它,并在代码中构建它。有点额外的安全性从不伤害任何人,IMO。