php+ajax 长轮询
最近在做项目时要做一个即时提醒功能,第一次做没思路。就百度了下。发现好多都说的模糊不清。我整理了下发出来大家指点下
jquery 代码:
这里使用使用ajax请求test页面获取success的值,请求超时时间为20秒。在20秒内若没数据返回则一直保持连接
$(function(){ $("#btn").bind(‘click‘,{btn:$(‘#btn‘)},function(e){ $.ajax({ type: ‘POST‘, dataType: ‘json‘, url: ‘test.php‘, timeout: ‘20000‘,//请求超时时间 data: {time: ‘2000000‘},// 每次请求等待时间 success: function(data,status){ if(data.success == ‘1‘){ $("#msg").append(‘<br>[有数据]‘+data.text); e.data.btn.click(); } // 未从服务器中获的数据 if(data.success == ‘0‘){ $("#msg").append(‘<br>[无数据]‘); e.data.btn.click(); } }, // ajax超时,继续查询 error:function(XMLHttpRequest,textStatus,errorThrown){ if(textStatus == "timeout"){ $("#msg").append(‘超时‘); e.data.btn.click(); } } }); }); });
php代码:
if(empty($_POST[‘time‘])) exit(); set_time_limit(0);// 无限请求超时时间 usleep($_POST[‘time‘]);// 等待时间 while(true){ $i++; $rand = rand(1,999); if($rand < 150){ $arr = array(‘success‘=>‘1‘,‘name‘=>‘有值‘,‘text‘=>$rand); echo json_encode($arr); exit(); }else{ $arr = array(‘success‘=>‘0‘,‘name‘=>‘无值‘,‘text‘=>$rand); echo json_encode($arr); exit(); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。