Ajax jQuery 调用 ColdFusion 组件

发布于 2024-12-02 23:47:02 字数 1790 浏览 0 评论 0原文

我是 jQuery 新手,正在尝试创建一个登录页面,该页面将对 CFC 进行 Ajax 调用,该 CFC 仅返回 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>

I'm new to jQuery and am trying to create a login page that will do an Ajax call to a CFC that simply returns true or false on whether login was successfull. My call is making it to the CFC with my arguments correctly, but what's getting returned is the problem. If I set my datatype in jQuery to be "html", I see what looks like a copy of my entire page in html along with the "true" value I'm looking for. But if I try setting it to "json" nothing happens. I'm on ColdFusion 9, jQuery 1.6.2.

My jQuery function:

$(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;

        }
    }); 
});

My CFC code, VERY simple, I'm just trying to get this to return correctly for now:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱花坊 2024-12-09 23:47:02

我认为 CF9 改变了这种行为,并且您不再需要对称为 Ajax 的 CFC 使用 onRequestStart“hack”。

我当然可能是错的——但我认为情况就是这样……

I thought CF9 changed that behaviour and that you no longer had to use the onRequestStart "hack" for Ajax-called CFCs.

I could of course be wrong - but I thought that was the case...

琴流音 2024-12-09 23:47:02

当你说:

如果我将 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>

When you say:

If I set my datatype in jQuery to be "html", I see what looks like a copy of my entire page in html along with the "true" value I'm looking for.

Do you mean that you see your "true" value followed by ColdFusion debugging info? If so, are you using Application.cfm or Application.cfc in your site? If Application.cfc, this is a common problem with AJAX functionality. You'll need to trap for an AJAX CFC request in your onRequestStart function, remove the OnRequest function for this request, and disable debugging. Try adding this to your onRequestStart function:

<cfif LCase(Right(ARGUMENTS.TargetPage,3)) EQ "cfc">
<cfset StructDelete(THIS,"OnRequest")>
<cfsetting showdebugoutput="no">
</cfif>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文