Jquery - 仅当在数据库中插入新行时如何调用函数

时间:2017-03-06 21:19:31

标签: php jquery sql ajax

我有一个包含帖子评论的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秒刷新一次注释区域,但我希望只有在数据库中插入新行(注释)时才会调用此函数 任何人都可以帮我说明如何做到这一点??

3 个答案:

答案 0 :(得分:0)

因为听起来您已经有提交评论的事件,并且假设您正在使用javascript将评论推送到服务器:

您可以使用回调并让它刷新。当然,这只会出现在提交评论的用户身上。

示例:JQuery Ajax calls with callbacks

由于您没有提到您的后端编码语言或数据库结构,因此我只能提供有限数量的建议。但是,可以使用AngularJS或Socket.io来建立双向绑定。

更新:

根据您的代码以及您如何调用它,我将假设update.php能够知道记录(注释)是否已成功添加。一旦添加它,让update.php将一个全局javascript变量设置为一个新值(增加它,使用一个随机数,只要值改变就没关系)

然后设置一个object.watch(),它将执行您的ajax调用,以便在该变量发生更改时更新注释。这可能是最简单的方法,无需使用socket.io或angular。

How to use object.watch in javascript

答案 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中的最后一个值,这显然是最后插入的注释。然后定期更新您的页面。只要添加更多评论,评论就会继续改变