使用PHP输出修改在处理期间发出JavaScript

问题描述:

我有一些PHP代码正在接收和处理大图像。我想在处理图像时使用jQuery来更新DOM来在某些点回显一些JavaScript。这是一些示例代码,但它不起作用。它只是等待整个5秒钟,然后使警报重新发生。我希望它立即执行第一次警报,然后在5秒后再次发出警报。使用PHP输出修改在处理期间发出JavaScript

ob_start(); 

echo '<script type="text/javascript">alert(\'1...\');</script>'; 

ob_flush(); 

sleep(5); 

ob_start(); 

echo '<script type="text/javascript">alert(\'2...\');</script>'; 

ob_flush(); 

任何人都可以帮忙吗?

+0

根据定义,使用输出缓冲时,使用输出缓冲时不能显示输出。我错了吗? – 2011-06-11 00:08:23

大多数浏览器会缓存内容,直到达到特定大小。尝试通过填充某些东西来让脚本块变长。

另请参阅:您应该致电flush,而不仅仅是ob_flush和make sure zlib compression is turned off

+0

它们应按以下顺序调用:'ob_flush(); flush();' – 2011-06-11 06:21:17

添加此到脚本的顶部将工作:

for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } 
ob_implicit_flush(1); 

据我所知,ob_implicit_flush(1)迫使每个输出语句冲洗。所以其他ob_start()ob_flush()调用将不是必要的。我不知道这是否适合你。

<?php 

for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); } 
ob_implicit_flush(1); 

echo '<script type="text/javascript">alert(\'1...\');</script>'; 

sleep(5); 

echo '<script type="text/javascript">alert(\'2...\');</script>'; 

?> 
+0

啊,废话我补充说,它不适合我。我在Firefox 4上。 – 2011-06-11 00:16:54

+0

尝试不使用'ob_start()'和'ob_flush()'调用(我添加了上面的完整代码)。我使用的是FF 3.4,对我来说工作正常。如果这不起作用,我想知道我们是否使用不同版本的PHP? – 2011-06-11 00:22:42

+0

是的,我复制并粘贴了关于运气的代码。 PHP 5.3.5在这里。 – 2011-06-11 00:33:47

继FF4工作:

<?php 
echo '<script type="text/javascript">alert("1");</script>'; 
flush(); 
sleep(5); 
echo '<script type="text/javascript">alert("2");</script>'; 
?> 

我实现了一个聊天 “服务器” 的东西,如很久以前。它正在工作。

这个ob_ *对此没有帮助。

+0

在FF4上没有这个好运气。 T___T – 2011-06-11 01:09:20

+0

对我来说,它在FF4中工作。其实我以前用console.log()而不是alert()。也许这是问题?现在我改回了alert()。 – flori 2011-06-11 01:16:43

我有一些接收和处理大图像的PHP代码。我想在处理图像时使用jQuery来更新DOM来在某些点回显一些JavaScript。

这可能超出了你必须完成的范围,但我会为此使用AJAX。你当然可以得到你想要发生的事情,但从长远来看,这种做法并不好。

使用AJAX请求上传图片并获取结果,而不是提交整个页面并等待它爬行回来。然后客户端上的定时器可以发出单独的 AJAX“你做了多少?要求。这两个PHP实例将通过在数据库中的作业条目上设置“完成”标志进行通信等。

虽然它使客户端的东西更复杂一些,但处理用户交互(例如因为允许用户取消长时间运行的作业)并使您的PHP代码更加关注更多。