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判断电脑访问、手机访问的例子
May 10 PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
Mar 23 PHP
PHP实现多文件上传的方法
Jul 08 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 PHP
Symfony2学习笔记之插件格式分析
Mar 17 PHP
php实现图片以base64显示的方法
Oct 13 PHP
php生成网页桌面快捷方式
May 05 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP-FPM和Nginx的通信机制详解
Feb 01 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
在laravel框架中实现封装公共方法全局调用
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
获得Google PR值的PHP代码
2007/01/28 PHP
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
PHP链表操作简单示例
2016/10/15 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
比较简单实用的使用正则三种版本的js去空格处理方法
2007/11/18 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
pycharm 使用心得(三)Hello world!
2014/06/05 Python
python统计日志ip访问数的方法
2015/07/06 Python
Python中正则表达式详解
2017/05/17 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
儿童python练习实例
2018/05/27 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
电子商务专业学生的学习自我评价
2013/10/27 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
开工仪式主持词
2014/03/20 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
Python+Appium新手教程
2021/04/17 Python
Redis数据同步之redis shake的实现方法
2022/04/21 Redis
python中pycryto实现数据加密
2022/04/29 Python