2011-06-29 37 views
1

我有一个使用getJSON访问同一域中的cfc的页面。一切工作正常在开发服务器上,但不是在现场。其他jquery执行得很好,只是不是.getJSON调用。我也尝试过来自网络的几个例子,并使用Ajax代替getJSON,但结果总是相同的 - 测试精确,而不是实况。jquery getJSON调用cfc在测试服务器上工作,但不生活

这是我目前用来测试的代码,它是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管理中的一个设置,而不是与代码有关的任何事情,但我甚至不知道从哪里开始。任何帮助将非常感激。


更新:我现在看到在萤火虫在测试服务器上的响应是4.0,但在实时服务器上它是//4.0。额外的斜杠是什么意思?

+0

哪些浏览器你试过这个?也有你检查与提琴手的请求,看看有什么回应? –

+1

尝试在浏览器上粘贴url目录,看看究竟返回什么作为回应 http:// [yourdomain] /jsonTest/mycfc.cfc?method=chkUsername&username= [用户名]&returnformat = json –

回答

4

您很可能在活动服务器上启用了ColdFusion的“secureJson”功能。它所做的是通过在JSON前面放置两个正斜杠来保护JSON输出。试图访问JSON的其他来源将只能看到一个Javascript注释(//),而知道启用该功能的ColdFusion将删除斜杠然后使用它。

您可以在Application.cfc(this.secureJson = false),Application.cfm(<cfapplication ... secureJson="false" />)或cffunction标记(<cffunction ... secureJson="false">)中的函数级别关闭它。在CF管理员中还有一个服务器范围的设置。您很可能在测试环境中关闭了此功能,但在生产环境中打开了此功能。

+0

啊,你完全正确,谢谢非常!我不知道这是一个设置。接下来的问题是:从我读过的内容看,使用cfajaxproxy会自动处理从返回的数据中删除前缀,但我一直使用.getJSON,因为我需要能够执行跨域请求。我已经阅读了几件事情,提到你可以在解析之前自己从jSON中删除前缀,如果你不使用cfajaxproxy,但没有解释如何做到这一点。思考? –

+0

获取返回的JSON的子字符串减去前两个字符并将其用作JSON字符串。 –

+0

这是我不确定的部分。在函数(isUsernameUnique)调用之前,我该如何做?我在该函数中尝试执行的任何操作都不会执行。感谢您的任何其他信息。 –

0

您的生产CF服务器上启用了secureJSON。与其在生产中关闭它,我会更新我的开发服务器以匹配它,并在代码中为它构建。一点额外的安全性从不会伤害任何人,IMO。

+0

非常感谢,确实是这个问题。 –

相关问题