【问题标题】:Ajax jQuery call to ColdFusion component对 ColdFusion 组件的 Ajax jQuery 调用
【发布时间】:2011-09-06 16:20:28
【问题描述】:

我是 jQuery 新手,我正在尝试创建一个登录页面,该页面将对 CFC 进行 Ajax 调用,该调用在登录是否成功时仅返回 true 或 false。我的电话是用我的论点正确地向 CFC 发出请求,但返回的是问题所在。如果我在 jQuery 中将我的数据类型设置为“html”,我会看到看起来像我在 html 中的整个页面的副本以及我正在寻找的“真实”值。但是,如果我尝试将其设置为“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>

【问题讨论】:

  • 你说“什么都没发生”是什么意思?请求是否提出?你能在 Firebug 或任何其他 HTTP 监视工具中看到它吗?是否返回响应?是空的吗?
  • 在 Application.cfc 中,您是否将 this.secureJSON 设置为 true 或 false?如果为 true,则将其设置为 false。

标签: jquery coldfusion cfc


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    当你说:

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

    您的意思是您看到“真实”值后跟 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>
    

    【讨论】:

    • 我现在实际上正在使用一个空白的 Application.cfm 页面,只是为了让事情顺利进行。我似乎找回了整个页面,顶部有 DOCTYPE 标记和大量 html,直到我看到我的“真实”声明大约一半。
    • 您是否在 CF Admin 中打开了调试功能?尝试将其关闭,看看是否只返回 JSON 数据。
    • 做到了!不知道为什么它会那样干扰,但它现在正在发生!谢谢!!
    • 调试会插入一堆包含各种调试内容的 HTML 内容。这将破坏任何期望返回纯 JSON 的代码。由于您没有使用 Application.cfc,因此我不确定如何选择性地禁用对 CFC 的 AJAX 调用的调试。一旦您在 CF Admin 中重新打开调试(假设这是一个可能需要调试的开发环境),AJAX CFC 调用将再次中断。
    • 有道理。感谢您提供有关设置 Application.cfc 人员的建议,这就是我将继续前进的方向,但希望在尝试解决这些问题时保持事情非常简单和直接。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多