Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用PHP和AJAX刷新页面的新事件通知_Php_Jquery_Ajax - Fatal编程技术网

不使用PHP和AJAX刷新页面的新事件通知

不使用PHP和AJAX刷新页面的新事件通知,php,jquery,ajax,Php,Jquery,Ajax,每次向数据库添加新事件时,我都会向用户显示通知。我的首页上有一个小图标和一个红方块,显示添加的新事件的数量。现在我只想知道在不刷新页面的情况下显示新事件的最佳方式是什么 这是我的密码 我的PHP查询基本上是当事件总数>0时,显示a和内部总数,但这仅显示页面刷新或加载时 我看到了一个类似下面的AJAX请求,它将PHP查询结果显示为一个内部html 函数testAjax{ var结果=; $.ajax{ url:data.php, async:false, 成功:函数数据,文本状态{ $previ

每次向数据库添加新事件时,我都会向用户显示通知。我的首页上有一个小图标和一个红方块,显示添加的新事件的数量。现在我只想知道在不刷新页面的情况下显示新事件的最佳方式是什么

这是我的密码

我的PHP查询基本上是当事件总数>0时,显示a和内部总数,但这仅显示页面刷新或加载时

我看到了一个类似下面的AJAX请求,它将PHP查询结果显示为一个内部html

函数testAjax{ var结果=; $.ajax{ url:data.php, async:false, 成功:函数数据,文本状态{ $preview.htmldata; }, 错误:函数{ 警惕“不好”; } }; 返回结果; } 但是,在不刷新或加载页面的情况下,如何在每次向数据库添加新事件时调用该函数?由于频繁的服务器查询,我认为使用设置的间隔或延迟会降低我的页面速度,因此我正在寻找其他选项。

php:

 public function index()
    {
        if (!$_GET['timed']) exit();
        if (!$_GET['uid']) exit();
        date_default_timezone_set("PRC");
        set_time_limit(0);
        $uid = $_GET['uid'];
        while (true) {
            sleep(3); 
            $lastReadTime = M('readtime')->where(array('uid'=>$uid))->field('lasttime')->select();
            $result = M('message')->where(array('send_time'=>array('gt',$lastReadTime),'touid'=>$uid))->count();
            if($result){
                $data = array(
                    'message' => $result,
                );
                echo  json_encode($data);
                exit();
            } else { 
                usleep(1000);
                exit();
                //return;
            }
        }
        session_write_close();
    }
js:

我正在使用THINKPHP和Jquery,您可以将其改为自己的方式。如果您的工作区在linux中,您可以使用或或websocket来实现这一点。

您可以查看和
 var cometURL = "{:U(GROUP_NAME.'/Comet/index')}"
    $(function () {
        (function longPolling() {
            //alert(Date.parse(new Date())/1000);
            $.ajax({
                url: cometURL,
                data: {"timed": Date.parse(new Date())/1000,"uid":$("#uid-hidden").val()},
                dataType: "json",
                timeout: 5000,
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    if (textStatus == "timeout") { 
                        longPolling();
                    } else { 
                        longPolling();
                    }
                },
                success: function (data, textStatus) {
                    if(data.message != 0){
                    $(document.body).append("<i class='iconfont'style='position: fixed;top: 28px;right: 30px;color: #2fa8ec;font-size: 20px'>&#xe61f;</i>");
                    $("#messagenum").html('message('+data.message+')');
                    }
                    if(data.image != 0){
                        $(document.body).append("<i class='iconfont'style='position: fixed;top: 28px;right: 30px;color: #2fa8ec;font-size: 20px'>&#xe61f;</i>");
                        $("#imagenum").html('New Image('+data.image+')');
                    }
                    if (textStatus == "success") { 
                        longPolling();
                    }
                }
            });
        })();
    });