Laravel не обновляет значения при использовании ajax - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь обновить значение столбца, но теперь он работает.Я пытаюсь это обновить представления на странице, но это не происходит.Нет ошибки Все еще не обновляется в базе данных.Просмотр страницы

    <form style="" name="fbCommentCountform" id="fbCommentCountForm" action="{{ url('/posts/{$display_post->id}')}}" method="POST">
    {{ csrf_field() }}
    <input type="hidden" name="_method" value="PUT">

    <input type="text" name="commentCount" id="fbFormCommentCount">
    <input type="text" name="visitCount" id="hiddenFormPostVisitCounter" value="{{ $display_post->visit_count }}">
  </form>

Контроллер

public function update(Request $request, $id)
{
    $image = $request->file('featured_img');
  $posts = Post::findOrFail($id);
  if(!empty($image))
  {

    $name = str_slug($request->title).'.'.$image->getClientOriginalExtension();
    $destinationPath = public_path('/public/images');
    $imagePath = $destinationPath. "/".  $name;
    $image->move($destinationPath, $name);
    $posts->featured_img = $name;
   }
  $posts->title = $request->title;
  $posts->body = $request->body;
  $posts->slug = $request->slug;
  $posts->categories_id = $request->category;
  $posts->description = $request->description;
  $posts->visit_count = $request->visitCount;
  $this->validate($request,[
    'title' => 'required|string|max:255',
    'body' => 'required'
  ]);
  $posts->update();
  return redirect('posts');

Теперь вот код ajax

<script>
  let fbCommentCount = document.getElementById('fbCommentCount').getElementsByClassName('fb_comments_count');
setTimeout(function() {
  document.getElementById('fbFormCommentCount').value = fbCommentCount[0].innerHTML;

  var $formVar = $('#fbCommentCountForm');

  let visitCount = document.getElementById('hiddenFormPostVisitCounter').value;

  let visitCountPlusOne = parseInt(visitCount) + 1;
  document.getElementById('hiddenFormPostVisitCounter').value = visitCountPlusOne;

  $.ajax({
    url: $formVar.prop('{{ url('/posts/{$display_post->id}') }}'),
    method: 'PUT',
    data: $formVar.serialize(),
  });
  }, 1000);
</script>

Если кто-то может помочь мне решить эту проблему

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Возможно, это не сработает, но сначала проверьте:

  • Ваш маршрут должен быть "PUT"
  • Будет лучше, если вы в update используете $post вместо $posts.Вы запрашиваете только один пост;)
  • Для просмотра используйте именованные маршруты вместо URL.В будущем будет лучше управлять всем без поиска, где вы его использовали:)
  • Измените $posts->update(); на:

    if ($post->isDirt()) {
        $post->save(); //Notice that here i am using save instead of update
    }
    

Не могли бы вы предоставитьнам ваш запрос от ajax?Я какое тело вы отправляете?Если вы отправляете файлы, вам нужно использовать форму multipartdata.Смотрите здесь: Что означает enctype = 'multipart / form-data'?

0 голосов
/ 21 октября 2018

Лучше использовать метод route() вместо url().Вы должны вызвать вашу переменную post.Это отдельный элемент, но вернемся к основному вопросу.Вы подтверждаете неправильно.В вашем запросе нет переменных: title и body, и Validator возвращает ошибку перед обновлением данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...