0

我在我的 jquery 验证页面中添加了一个用户名检查可用功能。如果我查看 Firebug 中远程功能的响应,我会看到正确的响应 - TRUE 或 FALSE。同样,如果我在响应消息中添加一个 alert() ,它会显示正确。但是,使用下面的代码 - addmethod 总是返回 TRUE。

$.validator.addMethod('usernamecheck',function(username) {
    var postURL = [url to remote function]
    $.ajax({
        cache:false,
        async:false,
        type: "POST",
        data: "username=" + username,
        url: postURL,
            success: function(msg) {
                result = (msg=='FALSE') ? false : true;
            }
    });
    return result;
}, '');

我已经验证了该函数仅返回布尔值 true 或 false,但我很难理解为什么true每次都返回结果。

解决了

我切换了 CFC 以确保它被设置为返回布尔值和普通值:

<cffunction name="checkUsernameRemote" access="remote" returntype="boolean" output="no" returnformat="plain">

然后对我的返回值进行了序列化 JSON:

<cfset LOCAL.result = SerializeJSON(LOCAL.result)/>      
<cfreturn LOCAL.result />

在我的 jQuery 中,我摆脱了 addMethod() 并将其移至远程规则中:

username: {
    required: true,
    rangelength: [4,50],
    remote: {
        cache:false,
        async:false,
        url: compath + "/rmtUserCFC.cfc?method=checkUsernameRemote&returnformat=json",
        type: "post"
    }
},
4

2 回答 2

1

success尝试在函数内添加您的回报。

success: function(msg) {
          return (msg=='FALSE') ? false : true;
      }
于 2012-12-14T16:51:18.160 回答
0

我切换了 CFC 以确保将其设置为返回布尔值和普通值:

<cffunction name="checkUsernameRemote" access="remote" returntype="boolean" output="no" returnformat="plain">

然后对我的返回值进行了序列化 JSON:

<cfset LOCAL.result = SerializeJSON(LOCAL.result)/>      
<cfreturn LOCAL.result />

在我的 jQuery 中,我摆脱了 addMethod() 并将其移至远程规则中:

username: {
required: true,
rangelength: [4,50],
remote: {
    url: compath + "/rmtUserCFC.cfc?method=checkUsernameRemote&returnformat=json",
    type: "post"
  }
},
于 2012-12-18T19:26:02.700 回答