Я использую петрушку в своем проекте для проверки формы. Одно поле в указанной форме является идентификатором, который должен быть уникальным - поэтому я добавил свой собственный addAsyncValidator, и в бэкэнд я возвращаю 404 или 200 в зависимости от того, существует ли уже запись с идентификатором.
Когда нажата кнопка отправки формы, я использую
$("#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');
}
});