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


Posted in PHP onJune 23, 2014

该实例通过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 相关文章推荐
杏林同学录(一)
Oct 09 PHP
PHP脚本数据库功能详解(下)
Oct 09 PHP
修改PHP的memory_limit限制的方法分享
Feb 21 PHP
UCenter 批量添加用户的php代码
Jul 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
又十个超级有用的PHP代码片段
Sep 24 PHP
php判断用户是否关注微信公众号
Jul 22 PHP
PHP验证终端类型是否为手机的简单实例
Feb 07 PHP
详解php框架Yaf路由重写
Jun 20 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 PHP
ThinkPHP实现事务回滚示例代码
Jun 23 #PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 #PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 #PHP
ThinkPHP学习笔记(一)ThinkPHP部署
Jun 22 #PHP
ThinkPHP的URL重写问题
Jun 22 #PHP
分享一个php 的异常处理程序
Jun 22 #PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 #PHP
You might like
ecshop实现smtp发送邮件
2015/02/03 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
Smarty保留变量用法分析
2016/05/23 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
js实现随机数小游戏
2019/06/28 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
Python中对列表排序实例
2015/01/04 Python
Python获取系统默认字符编码的方法
2015/06/04 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
python 检测图片是否有马赛克
2020/12/01 Python
Python扫描端口的实现
2021/01/25 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
查环查孕证明
2014/01/10 职场文书
汇报材料怎么写
2014/12/30 职场文书
三国演义读书笔记
2015/06/25 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers