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 相关文章推荐
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
Oct 09 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
php计算函数执行时间的方法
Mar 20 PHP
php生成年月日下载列表的方法
Apr 24 PHP
thinkPHP中session()方法用法详解
Dec 08 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
Dec 08 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
Jun 17 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
PHP convert_uudecode()函数讲解
Feb 14 PHP
php服务器的系统详解
Oct 12 PHP
PHP实现简易图形计算器
Aug 28 PHP
PHP接入支付宝接口失效流程详解
Nov 10 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
再次研究下cache_lite
2007/02/14 PHP
php zip文件解压类代码
2009/12/02 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
Underscore.js常用方法总结
2015/02/28 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
python 瀑布线指标编写实例
2020/06/03 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
机械设计制造专业个人求职信
2013/09/25 职场文书
工程招投标邀请书
2014/01/26 职场文书
教师节演讲稿
2014/05/06 职场文书
比赛口号大全
2014/06/10 职场文书
房屋产权证明书
2015/06/19 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书