Parsley 远程验证执行多次,即使在成功提交后
Parsley remote validation is performed several times, even after successful submission
我在我的项目中使用 Parsley 进行表单验证。所述表单中的一个字段是一个必须唯一的 ID - 所以我添加了自己的 addAsyncValidator 并且在后端我 return 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">
表单的 Parsley 初始化如下所示:
$('#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');
}
});
为什么不让 Parsley 处理 submit
事件,也不需要调用 whenValidate
。只需监听 form:success
或 form:submit
事件即可。
我在我的项目中使用 Parsley 进行表单验证。所述表单中的一个字段是一个必须唯一的 ID - 所以我添加了自己的 addAsyncValidator 并且在后端我 return 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">
表单的 Parsley 初始化如下所示:
$('#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');
}
});
为什么不让 Parsley 处理 submit
事件,也不需要调用 whenValidate
。只需监听 form:success
或 form:submit
事件即可。