我在php页面的无限循环中使用了flush()
函数,它每秒都会回显一个文本。当我在浏览器中打开页面时,它就工作了!但是当我通过jqueryajax加载它时,它没有响应!
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 );
}
});
HTTP流式传输不能简单地使用$.get来完成
插入<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
第页。S: 这肯定会杀死你的(糟糕的性能)服务器。你应该看看http://pusherapp.com这对于小型站点是免费的。
我认为没有调用成功处理程序,因为响应主体从未完全完成。