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