用ajax刷新问题

时间:2011-06-27 04:06:43

标签: php jquery ajax comet flush

我在php页面的无限循环中使用了flush()函数,它每秒都回显一个文本。当我在浏览器中打开页面时,它的工作原理!但是当我通过jquery ajax加载它时它没有响应!

php page

    <?php

if (ob_get_level() == 0) ob_start();

for ($i = 0; true/*$i<10*/; $i++){

        echo "<br> Line to show. $i";
        echo str_pad('',4096)."\n";    

        ob_flush();
        flush();
        sleep(1);

}

ob_end_flush();

?>

jquery代码

$.ajax({
  url: 'res.php',

  beforeSend: function(  ) {
    $('#mydiv').html('loading...');
  },
  success: function( data ) {

      $('#mydiv').html(  data );

  }
});

2 个答案:

答案 0 :(得分:1)

使用$ .get

无法完成HTTP-Streaming

按以下方式插入<script> tagshttp://ajaxpatterns.org/archive/HTTP_Streaming.php

 <?
      while (true) {
    ?>
        <script type="text/javascript">
          $('news').innerHTML = '<?= getLatestNews() ?>';
        </script>
    <?
        flush(); // Ensure the Javascript tag is written out immediately
        sleep(10);
      }
    ?>

HTTP-streaming是一个非常复杂的黑客攻击。您应该考虑使用长轮询,而不是在每个浏览器中都可以使用。似乎有一些solutions(幻灯片54)

简单的长轮询示例主题:

How do I implement basic "Long Polling"?

This video shows how to do long-polling: http://www.screenr.com/SNH

P.S:这肯定会杀死你的(性能不佳)服务器。您应该查看http://pusherapp.com,这对于小型网站是免费的。

答案 1 :(得分:0)

我会说没有调用成功处理程序,因为响应主体永远不会完全完成。