@Jony1337

Почему не приходят данные в ответ от php скрипта?

Привет , есть скрипт который получает данные для проверки из форму
// массив для хранения ошибок
$errorContainer = array();
// полученные данные
$arrayFields = array(
    'name_user' => $_POST['name_user'],
    'email_user' => $_POST['email_user'],
    'password_user' => $_POST['password_user'],
    'password_2_user' => $_POST['password_2_user']
);
 
// проверка всех полей на пустоту
foreach($arrayFields as $fieldName => $oneField){
    if($oneField == '' || !isset($oneField)){
        $errorContainer[$fieldName] = 'Поле обязательно для заполнения';
    }
}
 
// сравнение введенных паролей
if($arrayFields['password_user'] != $arrayFields['password_2_user'])
    $errorContainer['password_2_user'] = 'Пароли не совпадают';
 
// делаем ответ для клиента
if(empty($errorContainer)){
    // если нет ошибок сообщаем об успехе
    echo json_encode(array('result' => 'success'));
}else{
    // если есть ошибки то отправляем
    echo json_encode(array('result' => 'error', 'text_error' => $errorContainer));
}

вот и код который отправляет данные
$(document).ready(function() {
    $('#form_test').submit(function(){


        // убираем класс ошибок с инпутов
        $('input').each(function(){
            $(this).removeClass('error_input');
        });
        // прячем текст ошибок
        $('.error').hide();
         
        // получение данных из полей
        var name_user = $('#name_user').val();
        var email_user = $('#email_user').val();
        var password_user = $('#password_user').val();
        var password_2_user = $('#password_2_user').val();

        $.ajax({
            // метод отправки 
            type: "POST",
            // путь до скрипта-обработчика
            url: "vd.php",
            // какие данные будут переданы
            data: {
                'name_user': name_user, 
                'email_user': email_user,
                'password_user': password_user,
                'password_2_user': password_2_user
            },
            // тип передачи данных
            dataType: "json",
            // действие, при ответе с сервера
            success: function(data){
                // в случае, когда пришло success. Отработало без ошибок
                if(data.result == 'success'){   
                    alert('форма корректно заполнена');
					return true;
                // в случае ошибок в форме
                }else{
                    // перебираем массив с ошибками
                    for(var errorField in data.text_error){
                        // выводим текст ошибок 
                        $('#'+errorField+'_error').html(data.text_error[errorField]);
                        // показываем текст ошибок
                        $('#'+errorField+'_error').show();
                        // обводим инпуты красным цветом
                        $('#'+errorField).addClass('error_input');                      
                    }
                }
            }
        });
        // останавливаем сабмит, чтоб не перезагружалась страница
        return false;
    });
});


и сама форма
<form  id="form_test"  method="post" class="s-form validateble register_form" action="vd.php">

  <div class="title">Reg</div>


  <div class="s-field ">
    <div class="text-wrapper">
      <input type="email" value="" tabindex="1" placeholder="E-mail" id="email_user"/>
<label id="email_user_error" class="error"></label>
      <div class="icon_email"></div>
    </div>
  </div>

  <div class="s-field ">
    <div class="text-wrapper">
      <input type="text" value="" tabindex="2" placeholder="Log" id = "name_user" />
	  <label id="name_user_error" class="error"></label>

      <div class="icon_username"></div>
    </div>
  </div>

  <div class="s-field">
    <div class="text-wrapper">
      <input type="password" value="" tabindex="3" placeholder="Passw" id="password_user" />
<label id="password_user_error" class="error"></label>
      <div class="icon_password"></div>
    </div>
  </div>

  <div class="s-field">
    <div class="text-wrapper">
      <input type="password" value="" tabindex="4" placeholder="Passw2" id="password_2_user" />
<label id="password_2_user_error" class="error"></label>
      <div class="icon_password"></div>
    </div>
  </div>

  <div class="s-buttons">
	 <input type="submit" value="Reg" class="button big green wide enable" id="send_data" />
  </div>
</form>
  • Вопрос задан
  • 409 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Arik
что именно не работает? как минимум проблема с
success: function(data){
    // в случае, когда пришло success. Отработало без ошибок
    if(data.result == 'success'){   
        alert('форма корректно заполнена');
        return true;
     }

форма не отправит данные дальше, так как это уже другое замыкание, которое будет вызвано когда запрос успешный придет, вместо возварта true вы должны запустить отправку формы вручную, но тогда вы в цикл уйдете, надо как-то сказать что данные верны, теперь чтоб отработал стандартный механизм, а не опять по кругу проверять данные
Ответ написан
У вас проблема в php коде:
$arrayFields = array(
    'name_user' => $_POST['name_user'],
    'email_user' => $_POST['email_user'],
    'password_user' => $_POST['password_user'],
    'password_2_user' => $_POST['password_2_user']
);


Если в $_POST нет какого-либо из указанных выше параметров, будет выброшен нотис, соответственно на фронт вернется не json объект, а просто текст, и alert'а не будет.

Сделайте установку параметров $arrayFields через тернарный оператор
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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