我flush()在php页面中使用了无限循环功能,它每秒都会回显一个文本。当我在浏览器中打开页面时,它起作用了!但是当我通过jquery ajax加载它时没有响应!
flush()
<?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(); ?>
$.ajax({ url: 'res.php', beforeSend: function( ) { $('#mydiv').html('loading...'); }, success: function( data ) { $('#mydiv').html( data ); } });
插入<script> tags如下:http : //ajaxpatterns.org/archive/HTTP_Streaming.php。
<script> tags
<? 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,该网站对小型网站是免费的。