当前位置:首页 > CMS教程 > Thinkphp > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-03-02 11:55:10 浏览: 评论:0 

这篇文章主要介绍了ThinkPHP结合ajax、Mysql实现的客户端通信功能,需要的朋友可以参考下。

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

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

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

  1. function showWords()//刷新时被调用函数,实现ajax请求 
  2.   {  
  3.    xmlHttp=GetXmlHttpObject();//从自定义的函数中获取请求对象。 
  4.    if (xmlHttp==null) 
  5.    { 
  6.     alert ("Browser does not support HTTP Request"
  7.     return
  8.    } 
  9.    var url="index.php?g=Ksks&m=Comments&a=refresh";//要请求的路径使用shuipfcms框架,所以g是分组,m是action控制器,a是模板 
  10.    url=url+"&data_id="+$("#data_id").val();//接上,data_id传的参数,用于查询数据库的id 
  11.    url=url+"&lasttime="+$("i").last().siblings('input').val();//lasttime是页面显示数据的最后一个记录的时间戳,查找时根据大于这个时间戳的条件查找 
  12.    xmlHttp.onreadystatechange=stateChanged;//响应状态改变时调用的函数 
  13.    xmlHttp.open("GET",url,true);//使用get方法提交 
  14.    xmlHttp.send();//上面传参之后,这句可要可不要 
  15.   } 
  16.   function stateChanged() //实现向页面插入数据功能 
  17.   {  
  18.   var str ="";  
  19.    if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete"
  20.    {  
  21.     eval("var arrs="+xmlHttp.responseText);//获取由action响应输出的数据,因为数据室php数组格式,需用eval或json转化成js数组格式 
  22.     var chdiv=$("#conversation_history");//通信聊天记录框 
  23.     for(var j=0;j<arrs.length;j++){//循环插入数据 
  24.        var obj=$("<tr><td><h3></h3></td><td></td></tr>");//定义页面当中记录框的html格式代码 
  25.    var i=$("<i>&nbsp;&nbsp;"+arrs[j].times+"</i><input type='hidden' value='"+arrs[j].times+"'>");//i标签i为thinkphp定义的直接将时间输出到input隐藏并且存储得到数据里面的聊天发送时间 
  26.    var p=$("<p></p>"); 
  27.    p.html(arrs[j].content);//聊天内容 
  28.    p.append(i); 
  29.    var h3value=arrs[j].name;//发送的作者 
  30.    obj.find("h3").html(h3value+":"); 
  31.    if(h3value=="主持人"
  32.    {obj.find("h3").addClass("presenter");}//主持人会特别显示 
  33.    obj.find("td:last").append(p); 
  34.        chdiv.append(obj);//追加到table里面 
  35.     } 
  36.     chdiv.parent().scrollTop(chdiv.parent()[0].scrollHeight+0);//滚动到底部 
  37.    }  
  38.   } 
  39.  
  40. function GetXmlHttpObject()//定义ajax请求对象 
  41.   { 
  42.    var xmlHttp=null; 
  43.    try 
  44.    { 
  45.     // Firefox, Opera 8.0+, Safari 
  46.     xmlHttp=new XMLHttpRequest(); 
  47.    } 
  48.    catch (e) 
  49.    { 
  50.     //Internet Explorer 
  51.     try 
  52.     { 
  53.      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
  54.     } 
  55.     catch (e) 
  56.     { 
  57.      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
  58.     } 
  59.    } 
  60.    return xmlHttp; 
  61.   } 

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

  1. function refresh(){ 
  2.    $data_id = I('get.data_id');//获得嘉宾id 
  3.    $lasttime = I('get.lasttime'); 
  4.    //print_r(date("Y-m-d H:i:s",$lasttime)); 
  5.    if(!$data_id
  6.     $this->error("该访谈不存在!");  
  7.    $data = M("ksks_words_memoir"); 
  8.      
  9.    //print_r(date('Y-m-d H:i:s',$lasttime)); 
  10.    if(!$data
  11.     $this->error("初始化数据失败!"); 
  12.    //$words = $data->where(array('dataid' => $data_id))->order('time asc')->select(); 
  13.    //print_r($data->where(array('time' => $lasttime))->select()); 
  14.    $where['time'] = array('gt',$lasttime); 
  15.    $count = $data->where($where)->count(); 
  16.    //print_r(date("Y-m-d H:i:s",$lasttime)); 
  17.    $words = $data->where($where)->select(); 
  18.    $datas = array();//要返回的数组 
  19.    $i = 0; 
  20.    foreach($words as $word
  21.    { 
  22.     $datas[$i]['name'] = $word['name']; 
  23.     $datas[$i]['content'] = $word['content']; 
  24.     $datas[$i]['times'] = date('Y-m-d H:i:s',$word['time']); 
  25.     $lasttime = $word['time']; 
  26.     $i = $i+1; 
  27.    } 
  28.    setCookie('lasttime',$lasttime); 
  29.    $datas = json_encode($datas); 
  30.    //$this->cache(); 
  31.    echo $datas
  32.  } 

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

  1. <volist name="words" id="vo"
  2. <tr> 
  3. <td><h3 <if condition="$vo['name']=='主持人'">class="presenter"</if>>{$vo.name}:</h3></td> 
  4. <td> 
  5. <div>{$vo.content}<i>&nbsp;&nbsp;{$vo.time|date="Y-m-d H:i:s",###}</i> 
  6.        <input type="hidden" name="time" value="{$vo.time}"
  7. </div> 
  8. </td> 
  9. </tr> 
  10. </volist> 

Tags: ThinkPHP客户端通信

分享到: