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 相关文章推荐
Windows 下的 PHP-PEAR 安装方法
Nov 20 PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 PHP
详解PHP中的Traits
Jul 29 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
Jan 07 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
php桥接模式应用案例分析
Oct 23 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 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
php 注释规范
2012/03/29 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
浅谈Python中copy()方法的使用
2015/05/21 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
Python 中Pickle库的使用详解
2018/02/24 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
python3下pygame如何实现显示中文
2020/01/11 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
英国探险旅游专家:Explore
2018/12/20 全球购物
正规的求职信范文分享
2013/12/11 职场文书
行政介绍信范文
2015/05/04 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
大国崛起英国观后感
2015/06/02 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL
Python可视化神器pyecharts绘制水球图
2022/07/07 Python