Почему валидация на сервере не происходит из-за ajaxForm?

Есть форма которую перед отправкой в БД я проверяю на сервере. Все работает на отлично и если форма отправляется пустая, то появляются ошибки типа "Введите заголовок"
Мой код для проверки
if (!empty($_POST)) {
      $errors = array();
      if ($title == "") {
          $errors[] = 'Please give a title for your post';
      }
      if ($short == "") {
          $errors[] = 'Please give some short description for your post';
      }
      if ($full == "") {
          $errors[] = 'Please give full description for your post';
      }
      if (strlen($title) < 2) {
          $errors[] = 'Title has to have 3 characters minimum';
      }
  }
  if (count($errors) > 0) {
      errorBlock($errors);
  }


Далее, я пытаюсь использовать ajax, чтобы показать прогресс отправки формы
(function() {

var bar = $('.bar');
var percent = $('.percent');
var status = $('#status');

$('form').ajaxForm({
    beforeSend: function() {
        status.empty();
        var percentVal = '0%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    uploadProgress: function(event, position, total, percentComplete) {
        var percentVal = percentComplete + '%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    success: function() {
        var percentVal = '100%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    complete: function(xhr) {
        window.location.href = "my-posts.php";
    }
}); 

})();

Форма отправляется, стаус бар работает.
Вроде все OK.
Но валидация на сервере просто перестает работать.
Если отправить пустую форму, то никаких сообщений не появляется о том, что поля пустые и пустая форма отправляется в БД.
Как только убираю скрипт, проверка формы на сервере опять работает
  • Вопрос задан
  • 2641 просмотр
Решения вопроса 1
@syamka
Как только убираю скрипт
значит, что отправка формы не AJAX работает ?
А что делает
errorBlock($errors);
?
Думаю, дело обстоит так : когда отправка формы происходит с обновлением страницы (не AJAX-ом), эта функция выводит сообщения об ошибке. В случае AJAX-отправке эти сообщения никто не выводит. То есть, от сервера приходит ответ с тем, что вывела функция errorBlock, этот ответ доступен в аргументах метода success, который вызывается, потому что сервер возвращает статус 200; но в методе success происходит только обновление статусбара до 100%
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
akubintsev
@akubintsev
Опытный backend разработчик
Что отправляется и принимается, глядя в Chrome Dev Tools?
Ответ написан
Комментировать
twixoff
@twixoff
Возможно ajax отправляет данные методом GET, а вы проверяете POST.
$('form').ajaxForm(
   ...
   type: "POST"
   ...
);
Ответ написан
Комментировать
В скрипте не видно, где объявляются переменные $title, $short и $full - и у меня появилось ощущение, что они появляются в следствии включенности директивы register_globals? Если это так - спешите это исправить. Кроме того, пустой массив (строчка 2 вашего кода) нужно перенести на строчку выше, чтобы переменная была задана, даже если это не запрос post, т.к. проверка-то идет без этого условия. Так же проверку на метод post лучше делать так:
if (strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') {
    // это POST
}

Ну и проверку на заполненность массива, имхо, быстрее и логичнее (если что notice валится не будут) лучше делать не через count, а через empty.
Ответ написан
Комментировать
iLeonidze
@iLeonidze
xbooster.ru
У Вас форма точно имеет тип POST, а не GET? Там точно все name правильные и автоматически ничем не заполнены?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы