我正在使用ColdFusion,并且对语言不熟悉。我想用给定的值执行数据库操作,并在触发文本框的onBlur事件时通过ajax响应返回结果。请检查下面的代码
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("#username").blur(function() {
alert("This input field has lost its focus.");
var userNameVal = $(this).val();
if(userNameVal != "") {
$.get("myajax.cfc?method=getuser&userName=userNameVal", function(res) {
$("#userid").val=res;
}, "JSON");
}
});
});
</script>
<input type='textbox' name='username' id='username' />
<input type='hidden' name='userid' id='userid'/>
myajax.cfc:
<cfcomponent>
<cffunction name="getuser" access="remote" returntype="Integer">
<cfargument name="userName" type="string" required="yes">
<cftry>
<cfquery name="getUser" datasource="ajax_example">
select USER_ID
from user u
where u.firstname=userName;
<cfqueryparam value = "#url.userName#" cfsqltype="cf_sql_varchar">
</cfquery>
<cfcatch>
<cfoutput>
#cfcatch.Detail#<br />
#cfcatch.Message#<br />
#cfcatch.tagcontext[1].line#:#cfcatch.tagcontext[1].template#
</cfoutput>
</cfcatch>
</cftry>
<cfreturn getUser.USER_ID/>
</cffunction>
</cfcomponent>
从我的ajax.cfc响应中,我想将USER_ID
返回到我的ajax调用。我怎么能这样做?
答案 0 :(得分:1)
您有以下代码:
where u.firstname=userName;
<cfqueryparam value = "#url.userName#" cfsqltype="cf_sql_varchar">
这是无效的sql。分号终止命令,ColdFusion将抛出错误,因为cfqueryparam标记随后出现。
您还可以在cftry块中进行此查询。 cfcatch代码输出数据。如果您从ColdFusion代码调用此函数,您将在Web浏览器中看到cfcatch信息。但是,您使用ajax调用它。它输出到黑洞。此外,由于try / catch,您没有收到ColdFusion错误。另外,cfcatch块不包含cfreturn标记,因此不会返回任何内容。
另一个错误是您在查询中使用了错误的范围。这样:
value = "#url.userName#"
应该是这样的:
value = "#arguments.userName#"
你试图一次做太多事情。我建议用ColdFusion调用你的方法,直到你使它正常工作。然后用ajax调用它。
答案 1 :(得分:1)
您需要在查询字符串中传递名为 userNameVal 的变量的实际值。像这样:
$.get("myajax.cfc?method=getuser&userName="+userNameVal, function(res) {
$("#userid").val=res;
}, "JSON");
正如@Dan建议的那样,你使用cfqueryparam
的方式是错误的。它应该这样做:
<cfquery name="getUser" datasource="ajax_example">
select USER_ID
from user u
where u.firstname=<cfqueryparam value = "#arguments.userName#" cfsqltype="cf_sql_varchar">
</cfquery>