Laravel在使用ajax时不更新值

时间:2018-10-20 20:28:05

标签: ajax laravel

我正在尝试更新列的值,但是它现在可以工作。 我正在尝试这样做以更新页面上的视图,但是没有发生。 没有错误仍未在数据库中更新。 查看页面

    <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 :(得分:0)

更好的做法是使用方法route()代替url()。 您应该调用变量post。它是单个元素,但要重点。您验证错误。在您的请求中,您没有变量:titlebody,并且Validator在更新数据之前会返回错误。

答案 1 :(得分:0)

也许这行不通,但请先检查:

  • 您的路线必须为“ PUT”
  • 如果您在update中使用$post而不是$posts,将会更好。您只请求一个帖子;)
  • 在视图中,使用命名的路由而不是URL。将来最好不进行搜索而管理所有内容:)
  • $posts->update();更改为:

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

能否请您向我们提供来自ajax的请求?我是你要寄的身体?如果要发送文件,则需要使用multipartdata格式。看这里: What does enctype='multipart/form-data' mean?