历史记录:我之前在this thread中启动了此问题。我花了一些时间试图让远程验证工作,所以我拒绝相信这是导致我悲伤的原因。
现在:我正在使用jQuery Validator,我已将js更新为1.14.0版。这个过程很顺利。所有字段都经过检查和验证,我甚至添加了一些额外的检查来帮助我找出问题:
invalidHandler
和$("#submitBTN").click()
,详情如下。
如果验证失败,这两个选项都会报告回来,并且该按钮还报告通过调用$(form).valid();
我有一个远程验证,它验证电子邮件地址,检查它是否已经在数据库中。这是工作。我使用帖子提交此请求。我应该使用替代技术吗?我这样说是因为验证时表格的帖子没有提交。
我甚至不在submitHandler
内进行,但如果我注释掉远程检查,我就可以访问submitHandler
并处理表单操作。
我已经审核了jQuery Validation Remote规则,但它的布局非常简单,所以我做错了什么?
这是我的html表单代码:
<form id="signup_form" name="signup_form" method="post" action="registration">
<h2>E-MAIL ADDRESS</h2>
<input value="<?=$uEmail?>" type="text" name="signup_email" id="signup_email" /><br />
<h2>PASSWORD</h2>
<input type="password" name="requiredpWord" id="requiredpWord"><br />
<h2>CONFIRM PASSWORD</h2>
<input type="password" name="requiredcpWord" id="requiredcpWord"><br />
<button id="submitBTN" type="submit" value="COMPLETE SIGNUP">COMPLETE SIGN UP</button>
</form>
以下是我的jQuery验证(注意我使用console.log
&amp; alert
混合进行调试):
$(function() {
$("#signup_form").validate({
rules: {
signup_email: {
email: true,
required: true,
remote: {
type: 'post',
url: 'registration/isEmailAvailable',
data: {
email:
function() {
// console.log(data);
return $( "#signup_email" ).val();
}
}
}
},
requiredpWord: {
required: true,
minlength: 8
},
requiredcpWord: {
equalTo: "#requiredpWord"
}
},
messages: {
signup_email: {
required: "Please provide an email",
email: "Please enter a valid email address"//,
},
requiredpWord: {
required: "Please provide a password.",
minlength: "Your password must be at least 8 characters long"
},
requiredcpWord: "Your passwords do not match."
},
invalidHandler:
function(form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
var message = errors == 1
? 'Please correct the following error:\n'
: 'Please correct the following ' + errors + ' errors.\n';
var errors = "";
if (validator.errorList.length > 0) {
for (x=0;x<validator.errorList.length;x++) {
errors += "\n\u25CF " + validator.errorList[x].message;
}
}
console.log(message + errors);
}
validator.focusInvalid();
},
//added this to see if the form would post, did not change it
submitHandler:
function(form) {
alert("form submitted");
// do other things for a valid form
form.submit();
}
});
})
这是我的按钮js验证:
$( "#submitBTN" ).click(function() {
alert( "Valid: " + $("#signup_form").valid() );
});
这是我的简单php验证脚本,在验证表单之后我可以阅读它:
var_dump($_POST);
启用远程部分验证:
当我按提交提醒报告时:
Valid: true
。
控制台报告电子邮件地址的验证帖子。没有其他事情发生或被报道。该页面仍保留在表单上。
远程部分禁用/已注释的验证:
如果我完全注释掉远程验证部分:
我查看以下警告:
Valid: true
&amp;&amp; form submitted
接下来是$ _POST的var_dump。表示表单操作已完成。
我将非常感谢您对如何使其发挥作用的任何建议?!
更新
远程检查几乎返回以下内容:
if(!$userHandler->isEmailAvailable($email)){
echo json_encode("Email Address is already registered: ".$email);
}else{
echo false;
}
exit;
如果返回true,则结果将成为错误消息,1。
答案 0 :(得分:1)
您的服务器端代码看起来应该更像......
if (!$userHandler->isEmailAvailable($email)) {
// failed validation
echo json_encode("Email Address is already registered: " . $email);
} else {
// passed validation
echo "true";
}
exit;
如果返回
true
,则结果将成为错误消息1
。
这是因为true
是一个布尔值(1
),插件期待一个字符串。从字面上看,任何不是"true"
(字符串),被视为验证失败,并会给出错误消息:
如果回复为"false"
,undefined
或null
,则会收到常规错误消息。
如果回复是"true"
,那么您已通过验证,并且不会显示任何消息。
如果响应是其他任何内容,则该响应将成为错误消息字符串。