Code example of client communication function implemented by ThinkPHP combined with ajax and Mysql

  • 2021-07-02 23:43:16
  • OfStack

This example realizes the client communication function through ThinkPHP combined with Ajax and mysql, as follows:

1. Use ajax local refresh function of js to insert the new records read from the database into the display area of the page every refresh. The code is as follows:


window.onload =setInterval(showWords1000);// Start the refresh function after loading is completed 

 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是页面显示数据的最后1个记录的时间戳,查找时根据大于这个时间戳的条件查找
    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>&nbsp;&nbsp;"+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()// Definition ajax Request object 
   {
    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 controller, code as follows:


function refresh(){
   $data_id = I('get.data_id');// Get a guest id
   $lasttime = I('get.lasttime');
   //print_r(date("Y-m-d H:i:s",$lasttime));
   if(!$data_id)
    $this->error(" The interview does not exist! "); 
   $data = M("ksks_words_memoir");
   
   //print_r(date('Y-m-d H:i:s',$lasttime));
   if(!$data)
    $this->error(" Failed to initialize data! ");
   //$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();// Array to return 
   $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. Chat page, the code is as follows:


<volist name="words" id="vo">
<tr>
<td><h3 <if condition="$vo['name']==' Moderator '">class="presenter"</if>>{$vo.name} : </h3></td>
<td>
<div>{$vo.content}<i>&nbsp;&nbsp;{$vo.time|date="Y-m-d H:i:s",###}</i>
       <input type="hidden" name="time" value="{$vo.time}">
</div>
</td>
</tr>
</volist>

Related articles: