如何将ColdFusion结果返回给ajax响应?

时间:2016-02-16 12:24:41

标签: coldfusion

我正在使用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调用。我怎么能这样做?

2 个答案:

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