javascript - Laravel 5.1 - 使用 ajax 打印评论,然后能够立即删除它

标签 javascript php jquery ajax laravel-5.1

我正在制作一个功能,我可以在其中放置评论,并且它会在不刷新页面的情况下显示(因此使用 AJAX)。

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

万一不清楚我会添加一个场景

目前有效:

1) User adds new comment

2) New comment shows via AJAX

3) Users refreshes the page

4) User can delete his comment

这目前不起作用:

1) User adds new comment

2) New comment shows via AJAX

3) user changes his mind and wants to delete the comment (without having refreshed the page first)

无论如何我可以选择新评论的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');

有什么想法可以解决我的错误逻辑,并使它正常工作吗?

最佳答案

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

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

关于javascript - Laravel 5.1 - 使用 ajax 打印评论,然后能够立即删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34343759/

相关文章:

php - 如何更新重复条目中的单行

Jquery返回post数据

javascript - 向ckeditor中的多个元素添加内联样式

javascript - 为什么 Angular4 Router 在 <router-outlet> 之外渲染元素

javascript - 未捕获的类型错误 : Cannot read property 'aDataSort' of undefined

javascript - forEach 循环为数组中的变量分配新值不会替换变量的值

php - 根据搜索条件在 PHP 中嵌入 SQL 搜索 $var

php - 使用外键关系同时创建两行

jQuery 将 target 属性添加到变量中的许多 href 元素

javascript - 具有相同名称javascript的函数声明中的函数声明