Mesuti
@Mesuti

Как на php вернуть конкретную ошибку при оправке формы Ajax?

Привет!

Форма с помощью Ajax отправляет данные в send.php обработчик и он уже взаимодействует с БазойДанных.

Можно ли прямо в обработчике send.php указывать ошибки типа "Неверный логин" или "Неверный пароль" или сразу обе ошибки и отправлять их на текущую страницу с формой?
Чтобы с помощью JavaScript далее оформлять эти ошибки для пользователя.

Если да, то покажете пример?

Нашел только технологию - передача ошибки в заголовок, но таким образом можно передать только 1 ошибку, да и строго определенные ошибки, да и не безопасно это от инъекций.

Не могу понять, как вообще делают такое.
Неужели можно только ограничиваться обработчиком на текущей странице, где форма отправки данных там и обработчик.

Пример
Ajax
$("form").submit(function(e) {
            e.preventDefault();
                $.ajax({
                    type: "POST",
                    url: "send.php",
                    data: $(this).serialize()
                }).done(function() {
                    // если успешная отправка
                }).fail(function () {
                    // если ошибка отправки
                });
                return false;
            });

Send.php (RedBean.php регистрация пользователя)
// Если такой логин есть, значит ошибка
if ( R::count('users', "login = ?", array($_POST['login'])) > 0)
{
// ХОТЯ И ВОЗНИКАЕТ ОШИБКА, AJAX ОТМЕЧАЕТ УСПЕШНУЮ ОТПРАВКУ. 
// КАК ЕЕ ОТПРАВИТЬ НА ТЕКУЩУЮ СТРАНИЦУ ?
$errors = 'Пользователь с таким Логином уже существует!';
} else
{
// Если логин уникальный - регистрируем юзера
$user = R::dispense('users');
$user->login = $_POST['login'];
$user->password = $_POST['password'];
R::store($user);
}
  • Вопрос задан
  • 1691 просмотр
Решения вопроса 1
Shlop
@Shlop
Full Stack Developer (PHP/Laravel/JavaScript)
Код может выглядеть вот так:
$("#form").submit(function(e) {
        e.preventDefault();
            $.ajax({
                dataType: 'json', //Тип данных, в котором ожидается получить ответ от сервера.
                type: "POST",
                url: "send.php",
                data: $(this).serialize()
            }).done(function(response) { // В response находится ответ от сервера который отправлен через echo из send.php
                if(!response.status) {
                    alert("Что-то не так");
                }
                else {
                    alert("Всё ок!");
                }
            }).fail(function () {
                
            });
            return false;
        });

// Если такой логин есть, значит ошибка
if ( R::count('users', "login = ?", array($_POST['login'])) > 0) {
	$response = [
		'messages_error' => 'Пользователь с таким Логином уже существует!',
		'status' => false,
	];
	echo json_encode($response); // Отправляем json ответ от сервера
} 
else {
	// Если логин уникальный - регистрируем юзера
	$user = R::dispense('users');
	$user->login = $_POST['login'];
	$user->password = $_POST['password'];
	R::store($user);
}


И кстати как инструмент для просмотра запросов к серверу и ответов от сервера, можно использовать вкладку Network в DevTools браузер Google Chrome, ну и в других браузерах тоже есть такая вкладка
5d4740daa6684529130203.png
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
Рекомендую присмотреться к методологии JSend: https://github.com/omniti-labs/jsend
А вообще, посмотрите, как сделаны API у других. Особенно рекомендую API Telegram ботов как эталон формирования ответов.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 19:51
1000 руб./за проект
24 апр. 2024, в 19:40
5000 руб./за проект
24 апр. 2024, в 19:18
50000 руб./за проект