За последние 24 часа нас посетил 20581 программист и 1106 роботов. Сейчас ищет 321 программист ...

Как правильно организовать валидацию полей через риквесты если запрос через ajax?

Тема в разделе "Laravel", создана пользователем Сереганек, 2 ноя 2018.

  1. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Если делать стандартный POST запрос с формы страницы, то все очень просто. Перез входом к контроллер в риквесте проверяются поля. Если не ОК, возврачается ответ, перезагружается страница, заполняются поля введенными данными, невалидные подсвечиваются и появляются тексты ошибок. Как это работает - все понятно.
    А как быть если не хочется обновлять страницу? Я могу отправить все эти данные через аякс. Они точно так же обработаются и наверное мы получим соответствующий риквест со всеми ошибками. Вопрос... Как в этом случае правильно забрать эти коды ошибок и отобразить их на форме? Это все нужно делать вручную скриптами? Или это все не так работает?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    лишнее действие , можно с помощью аякс заверстать
     
    Сереганек нравится это.
  3. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    А как мне передать клиенту все эти ошибки валидации? Когда это не аякс, то отлично работает такой вариант:
    Код (Text):
    1. @if ($errors->any())
    2.                     <div class="alert alert-danger">
    3.                         <ul>
    4.                             @foreach ($errors->all() as $error)
    5.                                 <li>{{ $error }}</li>
    6.                             @endforeach
    7.                         </ul>
    8.                     </div>
    9.                 @endif
    Но это бэкенд вставляет ошибки прямо в html. А как их передать массивом клиенту в респонсе, чтобы аякс смог подхватить?
    Наверное, должно быть что-то наподобие такого:
    Код (Text):
    1. return back()->with('error', 'Failed to find that resource');
    Но тогда мне придется все валидировать вручную и добавлять все ошибки в with()
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Когда ты делаешь AJAX, Laravel это видит и вместо редиректа при ошибках возвращает json и код 422, который большинством обработчиков AJAX-а типа jQuery, axios и т.п. перенаправляется в указанный при вызове обработчик ошибок.
     
    #4 mkramer, 2 ноя 2018
    Последнее редактирование: 2 ноя 2018
    Сереганек нравится это.
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Я обычно это также делаю, как проверки без ajax, потом отправляю результат и вывожу сообщение, которое пришло в responseText
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    @Dimon2x, это потому что ты с докой не дружишь :) Ларавель конечно громоздкий и не очень поворотливый, но все типичные задачи там уже решены, и уже конечно, там всё ОК с ajax-валидацией. ПРиходит такой себе аккуратненький json-чик.
    Код (Text):
    1.  
    2. {
    3.   "message": "The given data was invalid.",
    4.   "errors": {
    5.     "password": [
    6.       "The password confirmation does not match."
    7.     ],
    8.     "name": [
    9.       "The name field is required."
    10.     ],
    11.     "last_name": [
    12.       "The last name field is required."
    13.     ]
    14.   }
    15. }
     
  7. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @mkramer я вообще json не использую
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    @Dimon2x, гордиться нечем :) json вернуть быстрее, чем вёрстку, освобождает канал, легче интегрировать с приложениями. Не даром сейчас вообще стараются с сервера только json-ы и слать, а всю вёрстку делать на каком-нибудь Angular, Vue и т.п. Я, к своему стыду, тоже недавно только понял, какой это кайф, хотя профессионально (в смысле, за деньги и для денег) занимаюсь веб-разработкой уже 6 лет. Сейчас вот потихоньку даже переквалифицируюсь в фронтэнд разработчика, поскольку бэк часто (хотя и не всегда) в конторе, где теперь перешёл на постоянку с фриланса, теперь пишут джависты.
     
    nospiou нравится это.
  9. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @mkramer angular vue react с ssr это тема. Мобильные десктопные преложения вообще автоматом получаются под все платформы если правильно веб сделать.