一尘不染

Ajax的冲洗问题

ajax

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

php页面

    <?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 );

  }
});

阅读 194

收藏
2020-07-26

共1个答案

一尘不染

不能仅使用$ .get来完成HTTP流传输

插入<script> tags如下:http
:
//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流是一个非常复杂的技巧。您应该考虑使用长轮询,而不是在所有浏览器中都可以使用。似乎有一些解决方案(幻灯片54)

简单的长轮询示例主题:

如何实施基本的“长轮询”?

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

PS:这肯定会杀死您的(性能不佳)服务器。您应该访问http://pusherapp.com,该网站对小型网站是免费的。

2020-07-26