PHP输出缓冲循环和Jquery Ajax

时间:2012-04-26 06:12:06

标签: php jquery ajax comet infinite-loop

我正在阅读有关彗星编程的很多内容,但我在想这个实现是否可行。

这是我的jscript

$.ajax({
   url:"mypage.php",
   onProgress:{function(rsp){ //i know there is no such function like this
     $("#mydiv").append(rsp+"<br>");
   }}
});

这是我的mypage.php

<?php
    while(true){
    ob_start();
      echo time();
    ob_flush();
    }
    ?>

现在我想要的是我的ajax请求会在进度期间获取结果。这可能吗?

2 个答案:

答案 0 :(得分:1)

要发生这件事,你必须使用彗星技术.... 请参考

What is the best way of showing progress on an Ajax call?

答案 1 :(得分:1)

如果您只是想抓住时间,这就是轮询方式。为什么要使用资源进行无限循环。

<?php
//polling.php
if(isset($_GET['poll']) && $_GET['poll']=='1'){
$out = array('thetime'=>date("F j, Y, g:i:s a")); 
echo json_encode($out);
die;
}
?>


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
function poll(){
   setTimeout(function(){

      $.ajax({ url: "http://localhost/polling.php?poll=1",cache: false,
      success: function(data){
      //Do something with returned json
      $("#time").replaceWith("<p id=\"time\">The Server Time & Date is: "+ data.thetime +"</p>");
        //Next poll
        poll();
      }, dataType: "json"});
     // 1/2 a sec
  }, 500);
}

$(document).ready(function(){
    poll();
});
</script>

<p id="time">The Server Time & Date is: <?php echo date("F j, Y, g:i:s a");?></p>