@NastyaG

Как правильно сделать валидацию формы на клиенте и сервере?

Здравствуйте. Сейчас разбираюсь с валидацией формы.
Раньше делала на стороне клиента с помощью Jquery Validation Plugin.
Сейчас также обрабатываю данные на стороне сервера.
Вот моя форма:
<body>
<form id="form" method="post" action="javascript:void(0);" onsubmit="ajax()">
    <p>Ваше имя</p>
    <p><input type="text" id="name" name="name" class="name" value="" /></p>
    <p>Ваш email</p>
    <p><input type="text" name="email" class="email" value="" /></p>
    <p>Тема</p>
    <p><input type="text" name="subject" class="subject" value="" /></p>
    <p>Сообщение</p>
    <p><textarea name="message" class="message"></textarea></p>
    <p><input type="submit" name="send" class="send" value="send"></p>
</form>
 
<div id="results"></div>
 
<div id="res"></div>
</body


После нажатия на submit выполняется фцнкция ajax():

function ajax() { //Ajax отправка формы
    var msg = $("#form").serialize();
    $.ajax({
        type: "POST",
        url: "send.php",
        data: msg,
        success: function(data) {
            $("#results").html(data);
            if($("#results").val()=="SUCCESS VALIDATION"){
              addData();
            }
        },
        error:  function(xhr, str){
            alert("Возникла ошибка!");
        }
    });
}


Если send.php вернул SUCCESS VALIDATION, то вызываем функцию addData().

Также есть валидация на стороне клиента:

$(document).ready(function(){ //Валидация формы
 
    $( "#form" ).validate({
        rules:{
            name:{
                required: true
            },
            subject:{
                required: true
            },
            email:{
                required: true
            },
            message:{
                required:true
            }
        },
        messages:{
            name:{
                required: "This field is required"
            },
            subject:{
                required: "This field is required"
            },
            email:{
                required: "This field is required"
            },
            message:{
                required: "This field is required"
            }
        },
        submitHandler: function(form) {
 
            addData();
        }
 
    });
 
    $("#form input").click(function () {
        $("#res").text("");
 
    });
 
 
});


И также при успешной валидации выполняется функция addData().

Не могу понять, в случае успешной валидации и на сервере, и на клиенте , addData() будет вызываться 2 раза? А если я в ней добавляю записи в БД, то получится, что одно и то же пишу 2 раза.

Как поступить в данном случае?

Заранее спасибо за помощь!
  • Вопрос задан
  • 737 просмотров
Пригласить эксперта
Ответы на вопрос 1
@f_ban
Вызывайте функцию ajax() в обработчике submitHandler
...
submitHandler: function(form) {
    ajax ()
 }
...


Тогда будет работать такая логика...
При сабмите валидной форми отправить форму на сервер, и если тот тоже все подтвердит, выполнить метод addData()

Плюс ко всему саму форму можете передать методу ajax() в качестве параметра, тогда очистите логику обработки данных от логики работы с разметкой представления.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы