Php 在数据库中插入新数据时警告用户

Php 在数据库中插入新数据时警告用户,php,javascript,ajax,Php,Javascript,Ajax,我不知道如何搜索,所以我有点迷路了(我在这里看到的两个主题已经结束) 我有一个新闻网站,我想在数据库中插入新数据时警告用户。我想在StackOverflow上这样做,在这里我们不需要重新加载页面就可以收到警告,或者在facebook上,你不需要重新加载就可以收到新消息/通知的警告 哪种方法最好?是不是某种有超时的侦听器在不断地检查数据库?听起来效率不高 提前感谢。您需要javascript ajax和json以及回调函数来不断检查。这可以通过推送服务来完成,但PHP不适合这样做,您需要WebSo

我不知道如何搜索,所以我有点迷路了(我在这里看到的两个主题已经结束)

我有一个新闻网站,我想在数据库中插入新数据时警告用户。我想在StackOverflow上这样做,在这里我们不需要重新加载页面就可以收到警告,或者在facebook上,你不需要重新加载就可以收到新消息/通知的警告

哪种方法最好?是不是某种有超时的侦听器在不断地检查数据库?听起来效率不高


提前感谢。

您需要javascript ajax和json以及回调函数来不断检查。这可以通过推送服务来完成,但PHP不适合这样做,您需要WebSocket等。facebook使用超时调用。不确定是否存在堆栈溢出

   refreshInterval = 500
  refreshTimeout = setTimeout( getNotificationCounts, refreshInterval );
function getNotifications() {
        $.ajax({
            url : 'path_to_your_php',
            type : 'POST',
                    data:   //put for exampel user_id but it cvan be handled by sesion as well
            dataType : 'json',
            success : function(data) {
                alert('You have'+ data.total +' new messages')
                refreshTimeout = setTimeout( getNotificationCounts, refreshInterval ); //this will check every half of second
            }
        });
    }
然后在PHP中,例如,在数据库中有一个标志,用它检查数据是否是数据库中的新数据。注意格式化和正确的sql转义

    $result=mysql_query("SELECT count(*) as total from myTable where user_id=$_POST['user_id'] AND is_read=0"); 

      //note instad of $_POST you can use session if users are logged in, or however you are handling it
        $data=mysql_fetch_assoc($result);
        echo json_encode($data)
)

之后,您可以创建另一个ajax调用,在用户单击消息时将其标记为已读。或打开一个对话框列表或窗口

mysql_query("UPDATE myTable WHERE user_id=$_POST['user_id'] SET  is_read=1");

谢谢你回复伊莱扬。我已经考虑过这个超时解决方案。我不知道facebook会用这个。对于一个拥有数千个用户线程(大量数据库访问)的系统来说,这似乎是不够的。我想知道是否有一种方法可以在插入数据时在当前用户线程中触发一个事件(如notify()),但现在超时解决方案可以解决这个问题,谢谢。@JoãoMenighin如果您正确地构造数据库(在我构建的最新用户应用程序中,我们有通知表,它基本上处理所有内容)并为其编制索引,这并不是很大的开销(您不需要查询用户线程,但在创建用户线程时,您需要向通知表添加一个条目)。按您希望的方式推送通知的问题是,此时的客户端需要成为服务器,facebook习惯于每x n秒对服务器发出一次一致的ping。现在我认为他们有一个“拉式侦听器”,它是一个等待新数据的ajax请求。请参阅通过firebug。@JoãoMenighin还可以通过谷歌“推送PHp的通知”来获取有关如何在没有ajax请求的情况下完成此操作的更多详细信息(如前所述,它需要web seockets和node.js,所以您仍然需要回退)