Форум программистов, компьютерный форум, киберфорум
PHP: Laravel
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 08.05.2017
Сообщений: 50
1

Laravel валидация для Ajax

29.10.2020, 11:43. Просмотров 665. Ответов 3
Метки нет (Все метки)

Привет, всем.
Есть котроллер в котором проходит валидация данных если нет ошибок то отправляет на почту. Если есть ошибки то выводит на экран над формой. Всё хорошо работает когда форма не работает через ajax.
Я перевожу форму на ajax - [js], как мне сделать валидацию чтобы выводило на экран без перезагрузки страницы. Чтобы запрос проходил на контроллер где моя валидация а данное сообщение выводилось через аякс, как передать И вывести на форму ?
Всё что не пробую не выводит.

форма:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<form id="contactform" method="post">
<div class="alert alert-success">
{{session('status')}}
</div>
@endif
@if($errors->any())
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)//Выводил ошибки когда небыло аякса
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div id="тут хочу выводит сообщение с аякса"></div>
{{csrf_field()}}
<div class="form-group">
<label for="name">Name</label><br>
<br><input type="text" name="name" placeholder="Enter your Name" id="name" class="form-control">
</div>
<div class="form-group">
<label for="email">Email</label><br>
<br><input type="text" name="email" placeholder="Enter your Email" id="email" class="form-control">
</div>
<div class="form-group">
<label for="phone">Phone</label><br>
<br><input type="text" name="phone" placeholder="Enter your Phone" id="phone" class="form-control">
</div>
<div class="form-group">
<label for="msg">Message</label><br>
<br><input type="text" name="msg" placeholder="Enter your Message" id="msg" class="form-control">
</div>
<button type="contactform" id="test_id" class="btn btn-succes">Submit</button>
</form>
</div>
</div>
</div>
</div>
Вот сам контроллер class:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class SubscribeController extends Controller
{
    public function subscribe(Request $request) {
 
      $validation = $request->validate([
        'name' => 'required',
        'email' => 'required',
        'phone' => 'required',
        'msg' => 'required'
      ]);
 
      $name = $request->name;
      $email = $request->email;
      $msg = $request->msg;
      $phone = $request->phone;
 
      Mail::to('Admin@gmail.com')->send(new SubscribeEmail($name, $email, $msg, $phone));
    }
}
Вот js
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$('body').on("click",'#test_id', function(e){
  e.preventDefault();
  var name = $("#name").val().trim();
  var email = $("#email").val().trim();
  var phone = $("#phone").val().trim();
  var msg = $("#msg").val().trim();
 
  $("$validation").text("");
 
  $.ajax({
    type: 'POST',
    url: '/en/sendmail',
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    data: { 'name': name, 'email': email, 'phone': phone, 'msg': msg },
    beforeSend: function() {
      $("#sendMail").prop("disabled", true);
    },
    success: function (data) {
      if(data == true) {
      alert("Error!");
    }
      else{
        $("#contactform").trigger("reset");
        $("#sendMail").prop("disabled", false);
        $("#MessSend").text("Сообщение отправлено!");
        return false;
        }
      }
    });
});
Пробeвал выводить таким образом без контроллера. То всё работает но это не то что надо. Плохой вариант.
в формe выводил данное сообщение через <div id="#errorMess"></div>

js:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$('body').on("click",'#test_id', function(e){
  e.preventDefault();
  var name = $("#name").val().trim();
  var email = $("#email").val().trim();
  var phone = $("#phone").val().trim();
  var msg = $("#msg").val().trim();
 
  if(name == ""){
    $("#errorMess").text("Введите Имя");
    return false;
  }
  else if(email == ""){
    $("#errorMess").text("Введите почту");
    return false;
  }
  else if(phone == ""){
    $("#errorMess").text("Введите номер телефона");
    return false;
  }
  else if(msg.length < 5) {
    $("#errorMess").text("Введите в поле с сообщением не меньше 5 символов");
    return false;
  }
 
  $("#errorMess").text("");
 
 
  $.ajax({
    type: 'POST',
    url: '/en/sendmail',
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    data: { 'name': name, 'email': email, 'phone': phone, 'msg': msg },
    beforeSend: function() {
      $("#sendMail").prop("disabled", true);
    },
    success: function (data) {
      if(data == true) {
      alert("Error!");
    }
      else{
        $("#contactform").trigger("reset");
        $("#sendMail").prop("disabled", false);
        $("#MessSend").text("Сообщение отправлено!");
        return false;
        }
      }
    });
});
И Вот сам контроллер
PHP
1
2
3
4
5
6
7
8
class SubscribeController extends Controller
{
    public function subscribe(Request $request) {
 
      Mail::to('a.pryamukha.dstar@gmail.com')->send(new SubscribeEmail($name, $email, $msg, $phone));
      
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2020, 11:43
Ответы с готовыми решениями:

Валидация в Laravel
Подскажите пожалуйста как реализовать валидацию при добавлении записей в таблицу в которой есть два...

Laravel: валидация формы в контроллере
Всем привет. Никак не могу найти верное решение проблемы. Во View имеются семь полей для...

Перенаправление Ajax + Laravel
С Laravel знаком не так давно, подскажите, кто знает! Ситуация следующая: Аяксом отправляю данные...

Ajax запрос на нескольких адресах Laravel
Доброго времени суток. Имеется js с ajax кодом $('#btntr').click(function(){ $.ajax({...

3
1707 / 1036 / 383
Регистрация: 13.06.2013
Сообщений: 3,517
30.10.2020, 14:23 2
Ты же понимаешь что PHP работает на сервере, а js у клиента в браузере?
Соответственно всё такое
PHP
1
2
3
@foreach($errors->all() as $error)//Выводил ошибки когда небыло аякса
<li>{{ $error }}</li>
@endforeach
Не будет работать вместе с аякс запросом. Весь ответ, который пришел от сервера, тебе нужно вручную распарсить через js и вставить в нужное место в html. Вообще я рекомедовал бы тебе выкинуть Jquery и использовать vue.js. Так гораздо проще строить крутой интерфейс.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
success: function (data) {
      if(data == true) {
      alert("Error!");
    }
      else{
        $("#contactform").trigger("reset");
        $("#sendMail").prop("disabled", false);
        $("#MessSend").text("Сообщение отправлено!");
        return false;
        }
      }
    });
Это чушь. success уже означает что ответ успешный и никакой data == true проверять не нужно. В data лежит ответ сервера. Правда твои контроллеры почему-то вообще ничего не возвращают в случае успеха. А вот ошибки у тебя будут в другом блоке.
Т.е. чтобы поймать ошибку валидации нужно что-то подобное
Javascript
1
2
3
error: function (data) {
 
}
И нужно еще статус ответа проверить, у ларавела кажется это 422.
0
1 / 1 / 0
Регистрация: 08.05.2017
Сообщений: 50
05.11.2020, 10:43  [ТС] 3
Сделал так, то ничего не происходит, в чём проблема?
вот скрипт
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$('body').on("click",'#test_id', function(e){
    e.preventDefault();
    var name = $("#name").val().trim();
    var email = $("#email").val().trim();
    var phone = $("#phone").val().trim();
    var msg = $("#msg").val().trim();
 
    $("$validation").text("");
 
    $.ajax({
      type: 'POST',
      url: '/en/sendmail',
      headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      },
      data: { 'name': name, 'email': email, 'phone': phone, 'msg': msg },
      beforeSend: function() {
        $("#sendMail").prop("disabled", true);
      },
      success: function (data) {
        $("#contactform").trigger("reset");
        $("#test_id").prop("disabled", false);
        console.log('successfully data added');
      },
      error: function(error){
        $(#nameError).text(error.responseJSON.errors.name);
      }
    }
  }
});
});
вот обработчик
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
 
namespace App\Http\Controllers;
 
use App\Mail\SubscribeEmail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
 
class SubscribeController extends Controller
{
  public function subscribe(Request $request) {
    $validation = $request->validate([
       'name' => 'required|min:2',
       'email' => 'required',
       'phone' => 'required|min:9|max:13',
       'msg' => 'required|min:10'
     ]);
 
     $name = $request->name;
     $email = $request->email;
     $msg = $request->msg;
     $phone = $request->phone;
 
     return response()->json();
 
     //Mail::to('pryam@gmail.com')->send(new SubscribeEmail($name, $email, $msg, $phone));
 
   }
 
}
вот HTml для вывода ошибки
HTML5
1
<span class="text-danger" id="nameError"></span>
0
1 / 1 / 0
Регистрация: 08.05.2017
Сообщений: 50
17.11.2020, 13:32  [ТС] 4
Решено! Спасибо всем за ответ.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2020, 13:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Laravel Ajax запросы не работают, выдает ошибку 500
Доброго времени суток! Проблема в том, что ajax запрос в консоли браузера выдает вот что: &quot;Ошибка:...

Вывод статей без перезагрузки laravel+ ajax ошибка в web.php
я получаю вот такую вот ошибку ( на скрине ) и всегда срабатывает server not responding запрос...

AJAX Валидация
Создал форму, хочу валидировать значения через ajax. Но валидация возможна лишь для целой формы,...

Валидация формы + ajax обработка
Имеется такая форма: html &lt;form method=&quot;post&quot; action=&quot;#&quot; id=&quot;callbacks&quot;&gt; &lt;div...

Ajax валидация contact form 7
Добрый день, как настроить ajax валидацию для формы contact form 7 в модальном окне, скажите с чего...

Валидация формы и отправка на ajax
Привет всем! Делаю валидацию формы и после отправку писем с помощью jquery ajax Возникла проблема!...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.