Blogger Information
Blog 11
fans 0
comment 0
visits 9285
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP+Ajax实现在线聊天功能
The Wolf Of Faith
Original
942 people have browsed it

软件描述
HTML
首先我们放置一个获取数据按钮和数据存放地方#msg。

<div id="msg"></div>
<input id="btn" type="button" class='btn' value="获取数据" />
jQuery

我们向ajax.php请求,请求的时间设置80秒。在这80秒中若没有从服务端返回‘success’则一直保持连接状态,直到有数据返回或‘success’的值为0才关闭连接。在关闭连接后在继续下一次的请求。

$(function() {
   $("#btn").bind("click", {
       btn: $("#btn")
   },
   function(evdata) {
       $.ajax({
           type: "POST",
           dataType: "json",
           url: "ajax.php",
           timeout: 80000,//ajax请求超时时间80秒
           data: {
               time: "80"
           },
           //40秒后无论结果服务器都返回数据
           success: function(data, textStatus) {
               //从服务器得到数据,显示数据并继续查询
               if (data.success == "1") {
                   $("#msg").append("<br>[有数据]" + data.text);
                   evdata.data.btn.click();
               }
               //未从服务器得到数据,继续查询
               if (data.success == "0") {
                   $("#msg").append("<br>[无数据]");
                   evdata.data.btn.click();
               }
           },
           //Ajax请求超时,继续查询
           error: function(XMLHttpRequest, textStatus, errorThrown) {
               if (textStatus == "timeout") {
                   $("#msg").append("<br>[超时]");
                   evdata.data.btn.click();
               }
           }
       });
   });

Ajax.php
通过$_POST['time']来限制循环的超时时间,避免资源过度浪费。要注意的是浏览器不关闭的话,会一直请求下去......

if(empty($_POST['time']))exit();
set_time_limit(0);//无限请求超时时间
$i=0;
while (true){
   //sleep(1);
   usleep(500000);//0.5秒
   $i++;

   //若得到数据则马上返回数据给客服端,并结束本次请求
   $rand=rand(1,999);
   if($rand<=15){
       $arr=array('success'=>"1",'name'=>'xiaocai','text'=>$rand);
       echo json_encode($arr);
       exit();
   }

   //服务器($_POST['time']*0.5)秒后告诉客服端无数据
   if($i==$_POST['time']){
       $arr=array('success'=>"0",'name'=>'xiaocai','text'=>$rand);
       echo json_encode($arr);
       exit();
   }
}
大家可以利用这种长轮询(COMET)方式,做一个在线聊天系统,若是成功的话,你肯定会觉得小有成就呢!~

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post