Ajax jQuery调用ColdFusion组件

时间:2011-09-06 16:20:28

标签: jquery coldfusion cfc

我是jQuery的新手,我正在尝试创建一个登录页面,该页面将对CFC执行Ajax调用,只需返回true或false,以确定登录是否成功。我的调用是正确地使用我的参数进入CFC,但返回的是问题。如果我将jQuery中的数据类型设置为“html”,我会在html中看到整个页面的副本以及我正在寻找的“true”值。但如果我尝试将其设置为“json”,则没有任何反应。我正在使用ColdFusion 9,jQuery 1.6.2。

我的jQuery函数:

$(function() {  
    $('.error').hide();  
    $(".button").click(function() {  

        // validate form here  
        $('.error').hide();  
        var name = $("input#username").val();  
        var pass = $("input#password").val();  
        if (name == "") {  
            $("label#username_error").show();  
            $("input#username").focus();  
            return false;  
        }  
        else if (pass == "") {  
            $("label#password_error").show();  
            $("input#password").focus();  
            return false;  
        }  
        else {
            var bodyContent = $.ajax({
                  url: "cfc/Login.cfc?method=tryLogin&returnFormat=JSON",
                  global: false,
                  type: "POST",
                  data: {username:name,password:pass},
                  dataType: "json",
                  async:false,
                  success: function(msg){
                     alert(msg);
                  }
               }
            ).responseText;

        }
    }); 
});

我的CFC代码,非常简单,我只是想让它暂时正确返回:

<cfcomponent name="Login" output="false">
    <cffunction name="tryLogin" access="remote" output="false">
        <cfargument name="username" type="string" required="true"/>
        <cfargument name="password" type="string" required="true"/>
        <cfset var result = true />

        <cfreturn result />
    </cffunction>
</cfcomponent>

2 个答案:

答案 0 :(得分:2)

我认为CF9改变了这种行为,你不再需要使用onRequestStart“hack”来调用Ajax的CFC。

我当然可能是错的 - 但我认为就是这样......

答案 1 :(得分:1)

当你说:

  

如果我将jQuery中的数据类型设置为“html”,我会在html中看到整个页面的副本以及我正在寻找的“true”值。

你是说你看到你的“真实”值后跟ColdFusion调试信息?如果是这样,您在网站中使用Application.cfm或Application.cfc吗?如果是Application.cfc,这是AJAX功能的常见问题。您需要在onRequestStart函数中捕获AJAX CFC请求,删除此请求的OnRequest函数,并禁用调试。尝试将此添加到onRequestStart函数:

<cfif LCase(Right(ARGUMENTS.TargetPage,3)) EQ "cfc">
<cfset StructDelete(THIS,"OnRequest")>
<cfsetting showdebugoutput="no">
</cfif>