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字符串截取问题
Nov 28 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
PHP中把有符号整型转换为无符号整型方法
May 27 PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 PHP
php常量详细解析
Oct 27 PHP
thinkPHP中验证码的简单使用方法
Dec 26 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
PHP序列化操作方法分析
Sep 28 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
php TP5框架生成二维码链接
Apr 01 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异常处理方法实例汇总
2015/06/24 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
页面点击小红心js实现代码
2018/05/26 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
浅谈Django REST Framework限速
2017/12/12 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
销售会计工作职责
2013/12/02 职场文书
皮肤科医师岗位职责
2013/12/04 职场文书
业务总经理岗位职责
2014/02/03 职场文书
寒假家长评语大全
2014/04/16 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
党员先进事迹材料
2014/12/19 职场文书
优秀校长事迹材料
2014/12/24 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript