我正在使用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的默认行为是返回所有私有属性的值。
现在的问题是 -
有没有办法告诉struts动作我只想要有效的值 captcha或validMail为true或false。或
在jquery验证中是否有任何回调函数,以便我可以进一步处理响应数据并可以检查邮件或验证码 有效性,告诉验证者它是有效还是无效。
答案 0 :(得分:1)
不要做这个客户端......
success: function(data){
if(data.validCaptcha){
return true;
}else{
return false;
}
}
...因为这已经由插件内部处理。
您应该输出"false"
(也undefined
,null
或字符串)表示无效,或"true"
从服务器端脚本输出有效remote
将抓住&自动处理响应。
serverside 资源通过jQuery.ajax(XMLHttpRequest)调用 获取与已验证的名称对应的键/值对 元素及其作为GET参数的值。 响应评估为 JSON,对于有效元素必须为
true
,并且可以是任何false
, 使用默认消息,undefined
或null
表示无效元素;要么 一个字符串,例如。 “这个名字已经被采用,请尝试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验证该字段是否“有效”。
如果来自服务器的响应是false
,null
,undefined
或字符串,则告诉jQuery验证该字段是“无效”。如果您返回一个字符串,它必须是JSON格式的,它将成为错误消息。
您需要修复服务器端代码,使其符合此要求。否则,您无法使用jQuery Validate插件。
引用OP :
“有没有办法告诉struts操作我只想要有效验证码或validMail的值为真或假。”
我不是Struts专家,但您在服务器端代码中尝试return success
和return true
而不是return false
吗?执行Struts操作中的逻辑并返回相应的布尔值。
答案 1 :(得分:0)
远程:假
当远程为false时,远程错误消息可用。
以上陈述将有效。这意味着当远程获取false作为响应时,它将显示错误消息。 例如:如果电子邮件已经存在,则检查电子邮件唯一标识时返回false,原因是输入的电子邮件不适用于新用户。如果数据库中不存在电子邮件意味着新用户可用,则返回true为什么因为此时可用的用户名不会显示错误消息。
if(checkEmailAvailable(String email)) {
//如果电子邮件已经存在,即不可用
返回false; }
否则
{
return true;
}