thinkphp使用ajax、jquery、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>&nbsp;&nbsp;"+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>&nbsp;&nbsp;{$vo.time|date="Y-m-d H:i:s",###}</i>
                          <input type="hidden" name="time" value="{$vo.time}">
</div>
</td>
</tr>
</volist>

//看世界盃,日後再談







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章