zoukankan      html  css  js  c++  java
  • jQuery+ThinkPHP+Ajax实现即时消息提醒功能

    心血来潮想为自己的小项目做一个提醒系统,譬如私信,评论等消息都能及时传递过来。由于道行尚浅,网上那些长轮询对于我略微复杂,于是觉得还是自己写一写试试比较好。

    我的思路是,单独在数据库中建一个提醒表,表主要由接收者的id和消息类型两个字段组成

    /*  前台提醒表  */
    CREATE TABLE IF NOT EXISTS notification(
        id           INT NOT NULL AUTO_INCREMENT PRIMARY KEY,    --    主键自增
        mid         INT NOT NULL DEFAULT 0,                        --    用户id
        type        INT NOT NULL DEFAULT 0                        --  0:私信 1:帖子评论 2:商品售出 3:商品评论 4:小组申请已发送 5:小组创建成功 6:小组新成员加入 7:小组旧成员退出 8:活动邀请
    )ENGINE=MyISAM DEFAULT CHARSET=UTF8;

    然后在前台页面中写一个递归函数,用来请求Ajax。

    function require() {
          var url = "{U('Group/checkNotify')}";
              
          $.get(url,null,function(data) {
                  
                // 如果获得的数据不为空,则显示提醒
               if ($.trim(data) != '') {
    
                   // 这里写提醒的方式
                alert('haha');
               }
          });
    
          // 每三秒请求一次
          setTimeout('require()',3000);
    }

    在后台查询三秒前到当前时刻数据库中是否有数据插入,如果有,则返回所需要的信息

    public function checkNotify() {
    
        // 实例化自定义的模型类
        $Notify = D("Notification");
    
        // 获取当前用户的id
        $mid = $_SESSION['member']['id'];
    
        // 由于Ajax三秒钟才执行一次,所以新数据的插入时间要晚于查询的的请求时间(当前时间)三秒钟
        $time = time() - 3;
    
        // 准备查询条件
        $where = "mid = $mid and created>$time";
    
         // 查找数据库中是否有新数据插入
        $bool = $Notify->where($where)->find();
            
        // 如果查询结果非空,则输出结果集第零条数据的type参数,即提醒类型,然后再从数据库对应表中获取提醒内容
        //本测试默认3秒中内只有一条消息,如果想更加精确,也可以缩短请求时间
        if ($bool != null) {
    
            //测试数据          
            echo $bool[0]['type'];
        };
    }

    当然,要让文档载入完毕后就执行该函数

    <body onload="javascript:return require();">

    小结:由于缺乏实战经验,笔主深知这些代码在性能、安全和其他方面都跟工业级别的代码相差十万八千里,但这也是我开通这个博客以目的:作为一个初学者,希望这个博客能记录我一步一步成为一名优秀工程师的轨迹。

  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/vitoLee/p/3625816.html
Copyright © 2011-2022 走看看