对cfc的jquery getJSON调用适用于测试服务器但不能正常运行

时间:2011-06-29 04:15:46

标签: jquery ajax coldfusion cfc

我有一个页面使用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。额外的斜杠是什么意思?

2 个答案:

答案 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。