如何实现类似于stackoverflow的评论功能?

3

如何做到像stackoverflow一样的评论功能?

更具体地说,我使用php/mysql,如何在不重新加载页面的情况下添加评论?我知道这是通过使用AJAX的简单过程,但是在SO上发布评论时,它还有立即删除选项。当我将评论插入数据库时,它们的ID号是自动递增的,所以我的真正问题现在是:

发布评论后,是在页面上添加内容以及一些javascript来将其附加到页面中吗?

还是使用AJAX检索您刚发布的评论,然后将其显示在页面上?

我想知道的原因是因为我的系统使用自动递增的ID,如果我使用第一种方法,也就是在提交时仅添加我发布的内容,那么这种方法将无法给我所需的ID,以便能够按ID号删除评论。

希望这讲得清楚。

更新 阅读其他帖子后,下面是我现在认为的内容:


让我测试一下注释 :D - Ata
6个回答

5
我冒昧地说,它恰好处于两者之间。评论的内容只是从你键入的内容中发布...但页面会等待,直到发生 AJAX 魔法并且页面具有新评论的 ID 才会附加您的评论。
(应该写成:如果我是你,我会这样做...快速、轻量级和功能强大)

现在我更明白了,事实上用jQuery听起来非常容易,我喜欢复杂的事情最终变得非常基础。 - JasonDavis

2
我的猜测是,在页面进行AJAX提交评论后,它会等待来自服务器的响应,该响应会给出评论的ID,然后根据返回的ID进行另一个AJAX调用以呈现评论。如果您想通过JavaScript添加评论而不从服务器检索评论,则绝对可以。但是,像用户个人资料链接之类的东西可能有点麻烦要注入。
编辑:更简单的方法是让第一个AJAX调用返回呈现整个评论所需的HTML,然后直接将该响应注入到页面中。这将消除2个AJAX调用的需求。

你提出了一个很好的观点...我最初支持Justin Niessner的答案,但现在我站在你这边。+1 - rmeador

1
我会尝试使用jQuery来做类似这样的事情:
function commentSubmit()
{
  $.post('/ajax/comment',{comment:$('#comment').val()},function(d){
    if(d 是错误) alert(d);
    else $('#allcomments').append(d);
  })
}
这里的d可能是错误信息或包含评论的HTML代码。

0

更新

阅读了这里的答案后,我得到了基本的想法,虽然我不知道如何编写JavaScript,但你会理解设计流程的思路:

POST comment input to script with AJAX {    
    if commentID is returned{
        Insert comment DIV into page, userID and userPicture are in a user session variable and commentID is returned from ajax post
    }ELSE IF error is returned{
        Insert an error message DIV into page
    }
}

然后,插入的评论div或其他内容将包括:
- 从会话变量中获取的用户名称
- 从会话变量中获取的userID,用于链接到其个人资料
- 从会话变量中获取的用户图片
- 评论ID,以允许用户删除该评论

然后,可以删除用户发布的页面上的任何评论。

POST comment ID and userID to DELETION script with AJAX {    
    if commentID is deleted{
        REMOVE comment DIV from page
    }ELSE IF error is returned{
        Insert an error message DIV into page
    }
}

0
我会进行一个ajax请求到一个php脚本,该脚本将把评论添加到mysql数据库中。 ajax回调将检索ID并在页面上视觉地添加评论(无需重新加载)。 删除按钮将执行另一个ajax请求到一个php脚本,将ID传递给脚本。 回调将从页面中删除评论。

0
如果您想要能够删除评论,您必须与服务器通信,因此必须使用ajax。只需将评论发送到服务器,等待返回评论ID,然后将评论格式化为一些HTML,将新评论ID隐藏在新HTML的某个地方(可能是在链接中以便删除评论),就可以了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接