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

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

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

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

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

Вопрос такой: возможно ли соединить две технологии? Проверять данные с помощью ajax, а отправлять данные и вставлять в базу на server.php? Разумеется, у меня в server.php дублируется вся валидация, однако мне хотелось бы сделать скрипт более удобным для юзера, без перезагрузки страницы в случае ошибок.
  • Вопрос задан
  • 9326 просмотров
Решения вопроса 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-ый не уверен, но вроде было в табличках).
Ответ написан
Ваш ответ на вопрос

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

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