ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例

5年以前  |  阅读数:653 次  |  编程语言:PHP 

该实例通过ThinkPHP结合Ajax与mysql实现了客户端的通信功能,具体如下:

1、使用js的ajax局部刷新功能,每次刷新将数据库中读取出的新记录插入到页面的显示区域,代码如下:


    window.onload =setInterval(showWords1000);//加载完成之后开始执行刷新功能

     function showWords()//刷新时被调用函数,实现ajax请求
       { 
        xmlHttp=GetXmlHttpObject();//从自定义的函数中获取请求对象。
        if (xmlHttp==null)
        {
         alert ("Browser does not support HTTP Request")
         return;
        }
        var url="index.php?g=Ksks&m;=Comments&a;=refresh";//要请求的路径使用shuipfcms框架,所以g是分组,m是action控制器,a是模板
        url=url+"&data;_id="+$("#data_id").val();//接上,data_id传的参数,用于查询数据库的id
        url=url+"&lasttime;="+$("i").last().siblings('input').val();//lasttime是页面显示数据的最后一个记录的时间戳,查找时根据大于这个时间戳的条件查找
        xmlHttp.onreadystatechange=stateChanged;//响应状态改变时调用的函数
        xmlHttp.open("GET",url,true);//使用get方法提交
        xmlHttp.send();//上面传参之后,这句可要可不要
       }
       function stateChanged() //实现向页面插入数据功能
       { 
       var str =""; 
        if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
        { 
         eval("var arrs="+xmlHttp.responseText);//获取由action响应输出的数据,因为数据室php数组格式,需用eval或json转化成js数组格式
         var chdiv=$("#conversation_history");//通信聊天记录框
         for(var j=0;j<arrs.length;j++){//循环插入数据
            var obj=$("<tr><td><h3></h3></td><td></td></tr>");//定义页面当中记录框的html格式代码
        var i=$("<i>  "+arrs[j].times+"</i><input type='hidden' value='"+arrs[j].times+"'>");//i标签i为thinkphp定义的直接将时间输出到input隐藏并且存储得到数据里面的聊天发送时间
        var p=$("<p></p>");
        p.html(arrs[j].content);//聊天内容
        p.append(i);
        var h3value=arrs[j].name;//发送的作者
        obj.find("h3").html(h3value+":");
        if(h3value=="主持人")
        {obj.find("h3").addClass("presenter");}//主持人会特别显示
        obj.find("td:last").append(p);
            chdiv.append(obj);//追加到table里面
         }
         chdiv.parent().scrollTop(chdiv.parent()[0].scrollHeight+0);//滚动到底部
        } 
       }


     function GetXmlHttpObject()//定义ajax请求对象
       {
        var xmlHttp=null;
        try
        {
         // Firefox, Opera 8.0+, Safari
         xmlHttp=new XMLHttpRequest();
        }
        catch (e)
        {
         //Internet Explorer
         try
         {
          xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
         }
         catch (e)
         {
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
         }
        }
        return xmlHttp;
       }

2、action控制器,代码如下:


    function refresh(){
       $data_id = I('get.data_id');//获得嘉宾id
       $lasttime = I('get.lasttime');
       //print_r(date("Y-m-d H:i:s",$lasttime));
       if(!$data_id)
        $this->error("该访谈不存在!"); 
       $data = M("ksks_words_memoir");

       //print_r(date('Y-m-d H:i:s',$lasttime));
       if(!$data)
        $this->error("初始化数据失败!");
       //$words = $data->where(array('dataid' => $data_id))->order('time asc')->select();
       //print_r($data->where(array('time' => $lasttime))->select());
       $where['time'] = array('gt',$lasttime);
       $count = $data->where($where)->count();
       //print_r(date("Y-m-d H:i:s",$lasttime));
       $words = $data->where($where)->select();
       $datas = array();//要返回的数组
       $i = 0;
       foreach($words as $word)
       {
        $datas[$i]['name'] = $word['name'];
        $datas[$i]['content'] = $word['content'];
        $datas[$i]['times'] = date('Y-m-d H:i:s',$word['time']);
        $lasttime = $word['time'];
        $i = $i+1;
       }
       setCookie('lasttime',$lasttime);
       $datas = json_encode($datas);
       //$this->cache();
       echo $datas;
     }

3、聊天页面,代码如下:


    <volist name="words" id="vo">
    <tr>
    <td><h3 <if condition="$vo['name']=='主持人'">class="presenter"</if>>{$vo.name}:</h3></td>
    <td>
    <div>{$vo.content}<i>  {$vo.time|date="Y-m-d H:i:s",###}</i>
           <input type="hidden" name="time" value="{$vo.time}">
    </div>
    </td>
    </tr>
    </volist>
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例