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 相关文章推荐
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
php中++i 与 i++ 的区别
Aug 08 PHP
ThinkPHP模板判断输出Empty标签用法详解
Jun 30 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
php实现singleton()单例模式实例
Nov 06 PHP
php编写简单的文章发布程序
Jun 18 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
php json中文编码为null的解决办法
Dec 14 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
PHP命名空间简单用法示例
Dec 28 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
PHP goto语句用法实例
2019/08/06 PHP
JS查看对象功能代码
2008/04/25 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
python简单实现操作Mysql数据库
2018/01/29 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
Python pandas如何向excel添加数据
2020/05/22 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js
AngularJS实现多级下拉框
2022/03/25 Javascript
Consul在linux环境的集群部署
2022/04/08 Servers