嘿我正在尝试使用Ajax验证表单。
验证正确时, 我希望表格提交。
否则我想显示反馈等。
但有时我会得到一个无限循环或表格不提交。
如何解决此问题?
//Find Sign form
var sign_form = $("#sign_form");
//User submits Sign form
sign_form.submit(function(e) {
e.preventDefault();
var $this = $(this);
var form = $(this).serializeArray();
var formObj = {};
$.each(form,
function(i, v) {
formObj[v.name] = v.value;
});
//Post Form data to Sign
$.post("./ajax/sign.php", formObj, function(data, status) {
var fdb = data.messages;
if(data.status == "success") {
console.log("validate is TRUE");
$this.submit();
return true;
} else {
if(fdb.emailaddress != null) {
$("#fdb_emailaddress").html(fdb["emailaddress"]);
}
console.log("validate is FALSE");
return false;
}
});
console.log("validate ended: we should not see this");
});
答案 0 :(得分:0)
当然提交会进入无限循环 - 因为你触发了函数内的提交()绑定提交()...... ;-) 您必须保存信息"已经进行了验证"不知何故,例如通过数据属性或数据(),然后对此作出反应。 e.g:
//Find Sign form
var sign_form = $("#sign_form");
//User submits Sign form
sign_form.submit(function(e) {
var $this = $(this);
if($this.data("validated") === true) return true;
e.preventDefault();
var form = $(this).serializeArray();
var formObj = {};
$.each(form,
function(i, v) {
formObj[v.name] = v.value;
});
//Post Form data to Sign
$.post("./ajax/sign.php", formObj, function(data, status) {
var fdb = data.messages;
if(data.status == "success") {
console.log("validate is TRUE");
$this.data("validated", true);
$this.submit();
return true;
} else {
if(fdb.emailaddress != null) {
$("#fdb_emailaddress").html(fdb["emailaddress"]);
}
console.log("validate is FALSE");
return false;
}
});
console.log("validate ended: we should not see this");
});