2
for($x=0;$x<100000;$x++) {
    echo "hello $x";
}

因此,通常情况下,它会先处理完所有内容,然后一次打印所有内容。有没有办法在发送命令时继续打印消息,以便我会看到一个新的hello $x附加信息,还是必须使用 jQuery/JavaScript?

更新:

我问是因为我正在尝试运行一个长测试脚本并让它在浏览器上一一显示所有结果,这样我就不必去检查日志,而可以直观地看到颜色编码的结果。我正在尝试对此做出类似的效果:http ://tools.css3.info/selectors-test/test.html如果有人可以提供 jQuery 的简短示例(如果必须这样做),我会很感激。

4

2 回答 2

3

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

如果您正在寻找视觉效果,您应该使用 JavaScript(但根据您的问题,我没有看到任何使用 Ajax 的理由)。它可以通过一个简单的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();
于 2012-05-13T04:10:35.593 回答
1

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

但是正如@Blender 所建议的那样,您最好使用 AJAX(通常使用 jQuery 完成)来执行此操作。

于 2012-05-13T03:37:10.723 回答