欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

thinkphp使用ajax、jquery、Mysql实现了简单的客户端通信功能_MySQL

程序员文章站 2022-05-23 22:16:14
...
AjaxThinkPHP

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 var obj=$("

");//定义页面当中记录框的html格式代码
var i=$(" "+arrs[j].times+"");//i标签i为thinkphp定义的直接将时间输出到

//input隐藏并且存储得到数据里面的聊天发送时间

var 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、聊天页面,直接上代码:



class="presenter">{$vo.name}:



{$vo.content} {$vo.time|date="Y-m-d H:i:s",###}





//看世界杯,日后再谈