07
Дек
2017

Обработка формы на ajax laravel

Всем доброго времени суток. Изучаю laravel. Разобрался с маршрутизацией и сборкой дизайна, добрался до обработки форм. Тестирую на исходниках прошлого учебного проекта, собранного на php+ajax jquery+mysql. Хочу отработать форму комментирования статьи. Код исходников прилагается ниже

Контроллер indexController, метод comment

<?php
public function comment(request $input){
  //$input = $request->all();
  $this->validate($input, [
  'name' => 'required|max:100',
  'message' => 'required|unique:comments,message',
   'article_id' => 'required|articles,id'
  ]);
  $data = array('name' => $input['name'],
      'message' => $input['message'],
      'article_id' => $input['article_id']);
  $result = DB::table('comments')->insert($data);
  if ($result == true) $response = 0;
  else $response = 'error';
  return json($response);
  }
?>

Фрагмент вида article-content.blade.php, форма добавления комментария и аякс обработчик

    <form method="post" action="" id="comment_form">
     <ul>
     <li>
     <label for="name">Ваше имя:</label>
     <input type="text" id="name" required class="required" placeholder="Ваше имя">
     </li>
     <li>
     <label for="message">Комментарий:</label>
     <textarea name="message" id="message" cols="100" rows="6" required  class="required" ></textarea>
      <input type="hidden" id="article_id" value="{{$article->id}}">
      </li>
      <li>
      <button type="submit" name="submit" id="submit" class="button fright">Оставить комментарий</button>
      <span id="resp"></span>
      {{csrf_field()}}
      </li>
      </ul>
      </form>
      <script>
      $(document).ready(function(){
      var time = new Date();
      var date = time.getFullYear()+"-" +(time.getMonth()+1)+ "-" +time.getDate()+ " " +time.getHours()+ ":"+time.getMinutes()+ ":"+time.getSeconds();
      $("#comment_form").submit(function(e){
      e.preventDefault();
      $.ajax({
      type: 'POST',
      url: '/comment',
      data: $("#comment_form").serialize(),
      dataType: 'json',
      cache: false,
      success: function(response){
      var messageResp = new Array('Ваше сообщение отправлено');
      var resultStat = messageResp[Number(response)];
      if(response == 0){
      $("#name").val("");
      $("#message").val("");
      $("#comments").append('<ol class="comments"><li class="comment"><h6>'+name+' <span class="meta">'+date+'</span></h6><p>'+message+'</p></li></ol>');
      }
$("#resp").text(resultStat).show().delay(1500).fadeOut(800);
return false;
}
});
});
});
</script>

Запись в маршрутизаторе route/web.php

Route::post('/comment', '[email protected]');

Собственно вопрос в том, что на сервер приходит урезанный набор полей: инпуты name и article_id не отправляются, в связи с чем валидация не проходит и метод comment возвращает ошибку. Хотелось бы узнать, почему так происходит. Заранее спасибо за ответы

Источник: https://ru.stackoverflow.com/questions/754990/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D1%84%D0%BE%D1%80%D0%BC%D1%8B-%D0%BD%D0%B0-ajax-laravel

Тебе может это понравится...

Добавить комментарий