我有一个包含帖子评论的div ...当用户添加评论时,包含评论的div会立即更新(我设置了一个在用户按下回车时调用的功能) 这是我的代码:
$(document).on('keydown','.addComment',function(e){
var id = $(this).attr('id').match(/\d+/);
var p_id = Number(id);
var comment_box = '#comment_box_'+id;
var content = $(comment_box).text();
if (e.which === 13 && e.shiftKey !== true) {
content = content.replace(/\s\s+/g, ' ').replace(/\n/g, '<br>');
if (content.length > 0 ) {
$.ajax({
type : 'POST',
url : 'update.php',
data: ({
content: content,
id: p_id,
act: "add_cmnt"
}),
success : function()
{
update_ca("comment_area_"+id, true);
}
}); //End of Ajax
}
return false;
}
});
但是从另一个帐户登录的用户必须刷新页面以查看新评论...现在我要做的是所有用户都看到最新评论而不刷新页面,即何时发布新评论任何用户都应该更新包含注释的div ...现在一种方法就是每隔10秒调用一次函数,通过ajax刷新div 这是代码:
setInterval(function(){update_comment_area();}, 10000);
这行代码每10秒刷新一次注释区域,但我希望只有在数据库中插入新行(注释)时才会调用此函数 任何人都可以帮我说明如何做到这一点??
答案 0 :(得分:0)
因为听起来您已经有提交评论的事件,并且假设您正在使用javascript将评论推送到服务器:
您可以使用回调并让它刷新。当然,这只会出现在提交评论的用户身上。
示例:JQuery Ajax calls with callbacks
由于您没有提到您的后端编码语言或数据库结构,因此我只能提供有限数量的建议。但是,可以使用AngularJS或Socket.io来建立双向绑定。
更新:
根据您的代码以及您如何调用它,我将假设update.php能够知道记录(注释)是否已成功添加。一旦添加它,让update.php将一个全局javascript变量设置为一个新值(增加它,使用一个随机数,只要值改变就没关系)
然后设置一个object.watch()
,它将执行您的ajax调用,以便在该变量发生更改时更新注释。这可能是最简单的方法,无需使用socket.io或angular。
答案 1 :(得分:0)
创建一个检查数据库中新行的函数,即checkNew()。
然后尝试:
if (checkNew()) {
refreshAjax();
}
注意:对于checkNew(),如果输入了新记录,则返回true; 否则返回false;
答案 2 :(得分:0)
这是一种实现checkNow()的方法:
让它检索从执行SQL的PHP页面获取的值:SELECT lastupdated FROM commentTable ORDER BY id DESC LIMIT 1.
它的作用是它检索commentTable中的最后一个值,这显然是最后插入的注释。然后定期更新您的页面。只要添加更多评论,评论就会继续改变