即使在成功提交后,也会多次执行欧芹远程验证



我在我的项目中使用欧芹进行表单验证。所述表单中的一个字段是必须唯一的 ID - 所以我添加了自己的 addAsyncValidator,在后端我返回 404 或 200,具体取决于带有 ID 的条目是否已存在。

当按下表单的提交按钮时,我使用

$("#frmobjectadd").submit(function(event){
$(this).parsley().whenValidate().done(function() {
//Ajax call to the backend to insert data here...
}
});

以处理异步验证问题。使用此方法进行验证是有效的,但是,我注意到几乎每次提交表单时,仅对该字段就至少进行了三次 Ajax 调用。此外,当表单有效时,数据将发送到后端,在那里成功处理。在 XHR 日志中,我看到一个 AJax 响应,指示它已成功,在这种情况下,我将用户重定向到其他页面。尽管如此,Parsley 仍然向远程验证器发送表单验证请求,该请求失败,因为它正在检查我刚刚插入的条目是否已存在于数据库中。这会导致在重定向发生之前显示一小段时间的错误消息。有什么办法可以解决这个问题吗?

远程验证器:

Parsley.addAsyncValidator('objectexists', function (xhr) {
return xhr.status === 200;
}, "/backend/insert.php?formfunction=checkIfUnique&projectid=<?php echo $projectid; ?>");

有问题的字段

<input type="text" required
data-parsley-remote
data-parsley-remote-validator="objectexists"
data-parsley-remote-message="Object name already exists."
class="form-control" id="id" name="id" value="" placeholder="Type in object name">

表单的欧芹初始化如下所示:

$('#frmobjectadd').parsley({
errorClass: 'has-error',
classHandler: function(el) {
return el.$element.closest(".form-group");
},
errorsWrapper: '<span class="help-block"></span>',
errorTemplate: "<span></span>",
errorsContainer: function(el) {
return el.$element.closest('.form-group');
}
});   

为什么不让欧芹处理submit事件,也不需要调用whenValidate。只需收听form:successform:submit事件即可。

最新更新