KonstRuctor
@KonstRuctor
программист, дизайнер, фотограф, журналист

Возможно ли сделать валидацию формы на jquery, а отправить на php?

Для примера есть такая форма, с полем типа file:

<div id="my_error"></div><br>
<form id="my_form" action="server.php" enctype="multipart/form-data" method="post"><br>
Ваш НИК <input type="text" name="username"><br>
Ваш E-mail <input type="text" name="email"><br>
Прикрепите файл <input type="file" name="userfile"><br>
<input type="hidden" name="action" value="sendform"><br>
<input type="submit" name="OK"><br>
</form><br>


Делаю валидацию на jquery:

$(document).ready(function(){<br>
$('#my_form').submit( function (e){<br>
        e.preventDefault();<br>
        var str = $(this).serialize();<br>
        $.ajax({<br>
            type: "POST",<br>
            url: "/ajax.php",<br>
            data: str,<br>
            success: function(msg) {<br>
                $("#my_error").ajaxComplete(function(event, request, settings) {<br>
                    if ( msg == 'OK' ) {<br>
                        // ???? Здесь мне надо отправить форму на server.php<br>
                    }<br>
                    else {<br>
                        $(this).html(msg);<br>
                    }<br>
                });<br>
            }<br>
        });<br>
        return false;<br>
    });<br>
});<br>


Саму валидацию осуществляет файлик ajax.php

if ( $_POST['action'] && $_POST['action'] == 'sendform' ) {<br>
$error = '';<br>
// опустим очистку переменной $_POST['username'] от мусора, это не важно в данном случае<br>
if ( !$_POST['username'] ) $error .= "<li>Не заполнен НИК</li>";<br>
if ( $_POST['username'] )  {<br>
// тут коннектимся к базе, проверяем занятость ника, может ли юзер вообще посылать файлы и так далее и так далее<br>
}<br>
if ( !$error ) echo "OK";<br>
else echo "<div class=\"err\">Ошибка! ".$error."</div>";<br>
}<br>


Вопрос такой: возможно ли соединить две технологии? Проверять данные с помощью ajax, а отправлять данные и вставлять в базу на server.php? Разумеется, у меня в server.php дублируется вся валидация, однако мне хотелось бы сделать скрипт более удобным для юзера, без перезагрузки страницы в случае ошибок.
  • Вопрос задан
  • 9547 просмотров
Решения вопроса 1
pxx
@pxx
Можно так:
$('#my_form').submit( function (e, data){
  if (data == 'silent') return true;
  e.preventDefault();
  ...
  if (valid) {
    $('#my_form').trigger('submit', 'silent');
  }
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
SLY_G
@SLY_G
журналист, переводчик, программист, стартапщик
Если я правильно понял вопрос, то можно сначала через аякс получать ответ от ajax.php
Если он равен, допустим, «ОК», тогда отправляем POST на server.php
В ином случае выдаём результат работы ajax.php в браузер.
Ответ написан
winbackgo
@winbackgo
Используйте готовые решения для проверки формы, например bassistance.de/jquery-plugins/jquery-plugin-validation/.
Ответ написан
Первое что приходит в голову, вместо:

// ???? Здесь мне надо отправить форму на server.php

добавить
return true;
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Вопервых да, можете.

Во вторых есть целая гора готовых плагинова для jQuery.

Во третьих что бы было вообще все ништяк, погуглите на тему аттрибута required и input type=«email» для более удобной валидации в современных браузерах. Для IE есть фолбэк скрипты.

Валидация непосредственно файлов возможна, если браузер поддерживает FileAPI. Тобиш все мажорные версии браузеров (IE7-9 не поддерживают, 10-ый не уверен, но вроде было в табличках).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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