jquery验证中的回调方法远程获取有效参数

时间:2014-11-14 14:16:13

标签: jquery struts2 jquery-validate

我正在使用jquery验证来验证我的表单我的代码是这样的 -

$('form#Register').validate({
        rules:{
            email:{
                required:true,
                email:true,
                remote:{
                    url:"CheckEmail",
                    type:"post",
                    data:{
                        email:function(){
                            return $('input#email').val();
                        }
                    }
                }
            },captcha:{
            required:true,
            remote:{
                url:"CheckCaptcha",
                type:"post",
                data:{
                    captcha:function(){
                        return $('input#captcha').val();
                    }
                },success:function(data){
                    if(data.validCaptcha){
                        return true;
                    }else{
                        return false;
                    }
                }
            }
        }
        }
    });

我正在检查邮件是否已通过应用程序注册,而不是使用操作CheckEmail。并通过行动CheckCaptcha验证验证码。这两个网址都是同一个动作。其中有私人领域。

public class BaseAction {
    private boolean validMail;
    private boolean validCaptcha;
    private String email;
    private String captcha;
--Getters and setters
public String checkMail(){
        UserService uService = new UserServiceImpl();
        if(uService.getUserByEmailID(getEmail())!=null){
            setValidMail(false);
        }else{
            setValidMail(true);
        }
        return success;
    }

    public String checkCaptcha(){
        HttpServletRequest request = ServletActionContext.getRequest();
        String captchaStored = (String)request.getSession().getAttribute("captcha");
        logger.info(captchaStored+" = "+getCaptcha());
        if(captchaStored!=null&&captchaStored.equals(getCaptcha())){
            setValidMail(true);
        }else{
            setValidMail(false);
        }
        return success;
    }
}

问题是jquery验证只会在响应中期望值为true或false但我的操作会给出这样的响应 -

{"captcha":null,"email":"admin@ba.co","validCaptcha":false,"validMail":true}

我认为struts action的默认行为是返回所有私有属性的值。

现在的问题是 -

  1. 有没有办法告诉struts动作我只想要有效的值 captcha或validMail为true或false。或

  2. 在jquery验证中是否有任何回调函数,以便我可以进一步处理响应数据并可以检查邮件或验证码 有效性,告诉验证者它是有效还是无效。

2 个答案:

答案 0 :(得分:1)

不要做这个客户端......

success: function(data){
    if(data.validCaptcha){
        return true;
    }else{
        return false;
    }
}

...因为这已经由插件内部处理。

您应该输出"false"(也undefinednull或字符串)表示无效,或"true"从服务器端脚本输出有效remote将抓住&自动处理响应。

Documentation

  

serverside 资源通过jQuery.ajax(XMLHttpRequest)调用   获取与已验证的名称对应的键/值对   元素及其作为GET参数的值。 响应评估为   JSON,对于有效元素必须为true,并且可以是任何false,   使用默认消息,undefinednull表示无效元素;要么   一个字符串,例如。 “这个名字已经被采用,请尝试peter123”   显示为错误消息。

您也不需要data参数...

data:{
    captcha:function(){
        return $('input#captcha').val();
    }
}

...因为#captcha字段的值已经由remote发送到您的服务器端脚本。仅当您需要发送其他数据以及此请求时,才会使用data参数。请参阅this example in the docs


这应该是你所需要的......

captcha: {
    required: true,
    remote: {
        url: "CheckCaptcha",
        type: "post"
    }
}

引用OP

  

“在jquery验证中是否有任何回调函数,以便我可以进一步处理响应数据,并且可以自己检查邮件或验证码的有效性,并告诉验证者它是有效还是无效。”

没有理由这样做。

  • 如果来自服务器的响应为true,则告诉jQuery验证该字段是否“有效”。

  • 如果来自服务器的响应是falsenullundefined或字符串,则告诉jQuery验证该字段是“无效”。如果您返回一个字符串,它必须是JSON格式的,它将成为错误消息。

您需要修复服务器端代码,使其符合此要求。否则,您无法使用jQuery Validate插件。


引用OP

  

“有没有办法告诉struts操作我只想要有效验证码或validMail的值为真或假。”

我不是Struts专家,但您在服务器端代码中尝试return successreturn true而不是return false吗?执行Struts操作中的逻辑并返回相应的布尔值。

答案 1 :(得分:0)

远程:假

当远程为false时,

远程错误消息可用。

以上陈述将有效。这意味着当远程获取false作为响应时,它将显示错误消息。 例如:如果电子邮件已经存在,则检查电子邮件唯一标识时返回false,原因是输入的电子邮件不适用于新用户。如果数据库中不存在电子邮件意味着新用户可用,则返回true为什么因为此时可用的用户名不会显示错误消息。

if(checkEmailAvailable(String email)) {

//如果电子邮件已经存在,即不可用

返回false; }

否则

{

return true;

}