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();
    }
}

转载于:https://www.cnblogs.com/MGer-PHP/p/3701573.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值