Получение ответа от сервера с помощью ajax

354
06 октября 2017, 18:45

Здравствуйте! На сайте есть модальное окно регистрации с полями и кнопкой зарегистрироваться. При нажатии на кнопку берутся значения из всех полей и отправляется ajax запрос на сервер, где происходит валидация. Если пользователь ввел неправильные данные то в блоке showRegError отображается список что пользователь ввел неправильно, а снизу должна остаться форма. Если пользователь ввел правильные данные то в блоке showSuccess должно отображаться сообщение об успешной регистрации но уже без формы. Код формы:

 <div class="showRegError">
 </div>
               <div class="showSuccess"> 
                  <form class="form-horizontal regForm"> ... </form>
               </div>

На данный момент получается выводить список ошибок в блоке showRegError. Т.е. с помощью ajax запроса получаю ответ в виде html, но как мне определить что пришло, ошибка или успешная регистрация? :

success: function(html){
                         $('.showRegError').html(html).show();
                       }

Если есть ошибки, то просто вывести их в цикле(должно выводится в showRegError):

 for ($i = 0; $i<count($err); $i++)
    {
        echo $err[$i] . '<br>';
    }

Если нет ошибок, то (в блок showSuccess):

echo '<p>Регистрация прошла успешно!</p>';
Answer 1

Ошибки складываешь например в массив (если их нет, массив пустой):

$errorMessage['Ошибка 1', 'Ошибка 2']

Сообщение об успехе кладешь в массив (если их нет, массив пустой)

$successMessage['Все хорошо 1', 'Все хорошо 2']

Складываешь их в итоговый массив:

$returnJson['errors'] = $errorMessage;
$returnJson['success'] = $successMessage;

Преобразуешь в json и возвращаешь в Ajax

echo json_encode($returnJson, JSON_UNESCAPED_UNICODE);

В js:

$('#add').on('click', function(e) {
    $.ajax({
        url: '',
        data: data,
        type: 'post',
        datatype: 'json',
        success: function (html) {
            html = JSON.parse(html);
            if(html.errors)
            {
                $('.showRegError').html('');
                i = 0;
                for (i = 0; i < html.errors.length; i++) {
                    $('.showRegError').append('<li>' + html.errors[i] + '</li>');
                }
            }
            else if(html.success)
            {
                $('.showSuccess').html('html.success');
            }
        },
    })
});
READ ALSO
Как узнать какие есть файлы на сайте?

Как узнать какие есть файлы на сайте?

Как узнать какие есть файлы на сайте?

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

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

В общем суть задачи, нужно выводить сообщение в будни дни с 18 вечера и до 9 утра и в любое время выходного дня

252
Вывод записей через foreach

Вывод записей через foreach

Хочу вывести записи в два блока list-group (если запись с id_user == 1 то в один блок вносить, а если id_user == 3 то в другой )Но они выводятся каждая запись...

299
не сохраняется сессия в yii2

не сохраняется сессия в yii2

Не работает логин в Yii2 - после каждого запроса создаётся новая сессия

162