我正在使用以下方式验证并提交表单:
$(documend).ready(function(){
//setting variables
ext_form.submit(function(){
if(validateExt_email() & validateExt_pass()){
var ext_email = $('#ext_email').attr('value');
var ext_pass = $('#ext_pass').attr('value');
$.ajax({
type: "post",
url: "validation_ext.php",
data: "ext_email="+ ext_email +"& ext_pass="+ ext_pass,
success: function (){
$('#content').load('p_order_ok.php');
}
})
return false;
}else
return false;
});
//validation rules
});
我认为当我将电子邮件验证规则更改为:
时,它停止了工作//validation rules
//e-mail
function validateExt_email(){
var ext_a = $("#ext_email").val();
var emailXHR = $.ajax({
type: "post",
url: "check_email_ext.php",
data: "email="+ext_a,
success: function(rsp){
//if it exists in our db
if(rsp == "exists"){
//do something
return true;
}
else
//if it's valid but not in our db
if(rsp == "ok" ){
// do something else
return false;
}
else
//if it's NOT valid
if(rsp == "invalid"){
//do something different
return false;
}
}
}).success = function() {
}
//continuing validation
)};
现在所有内容都经过验证,我点击了提交按钮,而不是在“validation_ext.php”中发布的表单在“check_email_ext.php”中发布(如firebug所示)。
任何帮助/建议?
谢谢
编辑.... 我放弃了这个...我只是用过滤器和正则表达式来验证电子邮件。 (简单的方法)
谢谢大家
答案 0 :(得分:2)
我认为你错了validateExt_email()
函数没有返回布尔值(而是undefined
),因为$.ajax
异步触发请求而JavaScript不等待用于success
回调。这意味着在这种情况下:
if(validateExt_email() & validateExt_pass()) { // always false
因为validateExt_email()
始终评估为false
(undefined
falsy )。
您可以重构您的解决方案,以便整个表单提交仅在ajax验证函数返回后发生,即success
是关键,例如:
ext_form.submit(function(){
// your email ajax checker
var emailXHR = $.ajax({
type: "post",
url: "check_email_ext.php",
...
}).success = function() {
// do next validation step
});
答案 1 :(得分:0)
这就是你的代码所要做的。
它表示,无论何时提交表单:
validateExt_email
,向check_email_ext.php
validateExt_pass
validation_ext.php
validateExt_email
永远不会返回任何值,因此您的情况永远不会过去。
答案 2 :(得分:-1)
您需要在选项中更改为async:false。
此外,您的范围可能无效。您会看到函数(e)将返回true或false。这是一个匿名函数。你应该做的是设置一个与你的提交处理程序具有相同范围的值,然后在最后一行,返回它。