Laravel 5.1 - 使用ajax打印注释,然后能够立即删除它

时间:2015-12-17 20:35:12

标签: javascript php jquery ajax laravel-5.1

我正在制作一个我可以发表评论的功能,它会在不刷新页面的情况下显示(所以使用AJAX)。

这很好用,但是用户还需要能够删除评论。当页面得到刷新时,他们可以删除它,但是我似乎找不到删除新放置的注释而无需刷新页面的方法。

不清楚我是否会添加一个场景

目前有效:

  

1)用户添加新评论

     

2)新评论通过AJAX显示

     

3)用户刷新页面

     

4)用户可以删除他的评论

目前无效:

  

1)用户添加新评论

     

2)新评论通过AJAX显示

     

3)用户改变主意并想删除评论(没有先刷新页面)

无论如何,我可以选择新放置的评论的ID然后将其删除吗?我找不到办法。

这是我当前的Ajax代码,只要一个注释被删除(任何地方)它不起作用,所以我的逻辑有问题(我知道是什么)。但我似乎无法找到正确的方法

Ajax代码

Var Teller只是一个常规计数器

$("#details-comment-btn").click(function(e){
    e.preventDefault();
    var functionType = "comment";
    var articleid=$('input[name=articleId]').val();
    var owner_id=$('input[name=owner_id]').val();
    var first_name=$('input[name=owner_first_name]').val();
    var last_name=$('input[name=owner_last_name]').val();
    var token=$('input[name=_token]').val();
    var commentBody = $('textarea[name=commentBody]').val();
    var profilepicture = $('input[name=owner_profilepic]').val();
    var commentid = parseInt($('input[name=last_comment_id]').val());

    if(commentBody.length != 0)
    {
        $.ajaxSetup({headers : {'X-CSRF-TOKEN' : $('meta[name="csrf-token"]').attr('content')}});

        $.ajax({
            type: "POST",
            url:articleid,
            data:
            {
                'user_id': owner_id,
                'commentBody': commentBody,
                'functionType': functionType,
                'article_id': articleid,
                '_token': token
            },
            success: function(){
                teller ++;
                console.log(articleid);
                $('#newcomment')
                        .prepend('<div class="comment" id="newCommentDiv' + teller + '">');
                    $("#newCommentDiv" + teller)
                            .append('<img  src="/profilePics/'+ profilepicture+ '"  class="profilepicture" >')
                            .append('<a href="/user/'+ owner_id +'/' + first_name + '/' + last_name + '" class="user">' + first_name + " " + last_name + '</a>')
                            .append('<span class="date">Just Now</span>')
                            .append('<p class="body">'+ commentBody + '</p>')
                            .append('<form id="deleteCommentForm'+ teller +'" action="" method="post" role="form">')

                            $("#deleteCommentForm" + teller)
                                .append(' <input type="hidden" name="_token" value="' + token + '">')
                                .append('<input type="hidden" name="articleId" value="' + articleid + '">')
                                .append('<input type="hidden" name="commentId" value="' + (commentid+teller) + '" >')
                                .append('<input type="submit" class="btn" name="remove_comment" id="comment-delete-btn" value="Remove">')

                    $("#newCommentDiv" + teller)
                            .append('</form>');

                $('#newcomment').fadeIn();
            }
        });
    }
});

这是我用来获取 last_comment_id 的查询我知道当一条评论被删除时它会跳过一个数字,所以在表单中打印的ID是不再纠正了。

$lastcomment = DB::table('comments')
    ->max('id');

我有什么想法可以解决我错误的逻辑,让这件事有效吗?

1 个答案:

答案 0 :(得分:2)

最好的方法是在创建评论时将Laravel的新评论的ID发送回客户端,并将其保存在客户端的某个位置(例如,在元素的ID中)。

然后,删除评论的AJAX调用将能够发送评论ID,因此您可以在Laravel中按ID查找评论以删除它。