我想通过使用Ajax添加评论

时间:2018-05-27 16:25:26

标签: ajax laravel

所以这是我的ajax代码

我认为ajax代码是对的。

$(document).ready(function(){
$('.add-comment').click(function(){
var comment_data = $('.comment-form').serialize();


$.ajax ({
headers: {
  'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},

method: 'POST',
url: '/comment',
data: comment_data,

success: function(data) {
  console.log(data);
  $('.all-comment').append(data);
},
error: function(data) {
  console.log('error');
}
})
})

});

这是我的控制器

  public function store(Request $reqeust) {

  $comment = Comment::create([

    'body' => request('body'),

  ]);

  return view('welcome',compact('comment'))->render();


}

我认为问题出现在控制器中,我是开发新手所以..是的

是的,我收到错误

POST http://localhost:8000/comment 500(内部服务器错误)

1 个答案:

答案 0 :(得分:0)

如果您正在进行AJAX通话,您可能不需要返回整个欢迎视图。如果评论成功保存,则最简单的方法是返回true,否则返回false。

此外,您不会将评论附加到任何内容。我猜你还有其他需要在评论表中填写的字段,例如post_id。如果是这种情况,您可以将post_id作为另一个参数传递给请求并执行:

public function store(Request $request)
{
    $post = Post::findOrFail( $request->post_id );

    Comment::create([
        'post_id'  => $post->id,
        'body'      => $request->body
    ]);

    return true;
}

这证明确实有一个要链接的帖子。

更好的是,您可以使用路径模型绑定和关系来执行:

public function store(Request $request, Post $post)
{
    $post->comments->create([
        'body' => $request->body
    ]);

    return true;
}

这将做同样的事情,它有点清洁。此外,由于关系,它会自动添加post_id(假设你设置了它)。