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);//加载完成之后开始执行刷新功能
- 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>
Tags: ThinkPHP客户端通信
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)