<div id="msg"></div><input id="btn" type="button" value="测试" />jQuery
$(function(){$("#btn").bind("click",{btn:$("#btn")},function(evdata){ $.ajax({type:"POST",dataType:"json",url:"data.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();}} }); });});PHP
if(emptyempty($_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(); }}运行效果:在图中可以看到无数据的请求时间达到了40S,在40S的请求中若获得数据则请求关闭。