2012-05-13 28 views
2
for($x=0;$x<100000;$x++) { 
    echo "hello $x"; 
} 

因此,通常情况下,它会先完成处理,然后立即打印所有内容。是否有一种方法可以在发送命令时继续打印邮件,这样我就能看到一个新的hello $x,或者我必须使用jQuery/JavaScript?在完成处理之前是否可以在while循环中打印PHP?

更新:

我问,因为我想运行一个漫长的测试脚本,并经1在浏览器上显示的所有结果1,所以我没有去检查日志,可以只直观地看到颜色编码的结果。我试图做出类似的效果:http://tools.css3.info/selectors-test/test.html如果任何人都可以提供一个简短的jQuery示例(如果必须这样做),我将不胜感激。

+0

PHP处理,并输出发送到Web浏览器。您的Web浏览器可能会立即渲染它,或者它可能会以大块的形式渲染它。我建议你使用jQuery执行此。 – Blender

+0

因为http是请求 - 响应系统,所以我相信只要使用ajax就可以。 –

+0

它会像命令行一样工作,相当确定吗? –

回答

3

虽然可以通过控制输出缓冲区,但我不会那样做,主要是因为它会延迟JavaScript DOMReady事件。

如果你正在寻找一个视觉效果,你应该使用JavaScript(但我没有看到基于你的问题说什么任何理由阿贾克斯)。它可以用简单的setInterval完成。考虑到最初为空<div id="hello">

var i = 0; 
var timer = setInterval(function(){ 
    if(i == 10000) { 
     clearInterval(timer); 
     return; 
    } 
    var div = document.getElementById('hello'); 
    div.innerHTML += 'hello ' + i + '<br>'; 
    i++; 
}, 250); 

我刚才看到您的编辑,现在我想到你居然要使用Ajax!你链接的例子确实如此。基本上,你必须在JavaScript中设置一个测试队列,每个测试都有一个唯一的URL。然后,这只是一次用Ajax发出一个请求的问题(jQuery和$.get将是最简单的方法)。下面假设一个<ul>,而不是从我前面的例子中,DIV,并且该服务器会返回一个成功或失败的消息对每个测试回应:

var tests = [ 
    'http://example.com/test1', 
    'http://example.com/test2', 
    'http://example.com/test3', 
]; 

function processQueue() { 
    if(tests.length > 0) { 
     var test = tests.shift(); 
     $.get(test, function(response) { 
      $('#some_ul').append('<li>' + response + '</li>'); 
      processQueue(); 
     });  
    } 
} 

processQueue(); 
+1

编辑后我改变了主意,这不仅仅是一种视觉效果。关键是,你不只是显示一个结果之一,你实际上是一个处理它们一个异步。 – bfavaretto

+0

即使在我给出最佳答案之后,我也很欣赏编辑。 – Strawberry

1

是的,如果你禁用输出缓冲:http://php.net/manual/en/book.outcontrol.php

但作为@Blender暗示你可能会更好用AJAX做这个(通常使用jQuery做)。

+0

我可以问一下AJAX如何做到这一点? – Strawberry

+0

@Strawberry你究竟想要做什么?有很多的教程在那里做用PHP + jQuery的阿贾克斯,看看周围,如果他们不回答你的问题,请扩展上面你的问题。 –

相关问题