一个接一个地打印循环,而不是同时使用php和ajax


print one by one itreation of loop instead of at once using php and ajax

我正在尝试一个接一个地打印循环迭代,而不是使用ajax来打印,这可能吗?喜欢迭代1迭代2

等等,但它们不应该一次而是一个接一个地作为循环工作

这是我的ajax和php代码。此时,整个代码处理过程并最终给出输出,而不是一个接一个的

<div id="div1"></div>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
jQuery(document).ready(function($) {
$("button").click(function(){
  $.ajax({url:"counter.php",success:function(result){
    $("#div1").html(result);
  }});
});

});
</script>
<button name="button" value="button" style="width:200px; height:200px;">

以下是PHP代码

<?php
     for ($i = 0; $i < 10; $i++)
     {
       echo "<div>" . time() . ": Iteration $i</div>";
       sleep(1);
       flush();
     } 
    ?>

这是因为一旦发布请求循环,就会获得响应并将响应还原为ajax方法循环执行得太快了,一旦它执行了这么长时间,你就需要休眠循环,这样一旦你在几秒钟后再次执行循环得到结果,你就会再次得到响应

请按照这个超时功能休眠一段时间

在我所属的位置,您在整个循环中传递的参数,并且没有丢失动态值。。。。

> (function(i){
>         setTimeout(function(){
> 
> }, 1000 * i);
>     }(i));
这是真的。如果执行完整的PHP脚本,PHP将(默认情况下)发送输出。如果你想要一个计数器,你应该循环AJAX调用,而不是PHP代码。此示例将起作用:
    var currentCounter = 0;
    var countTill = 10;
    function invokeCounter()
    {
        $.ajax({url:"counter.php?counter="+currentCounter,success:function(result)
        {
            $("#div1").html(result);
            if(currentCounter >= countTill)
            {
                clearInterval(myCounter);
            }
            currentCounter++;
        }});
    }
    var myCounter = setInterval(function()
    {
        invokeCounter();
    }, 1000);

在您的PHP中,您可以获得当前计数器

<?php
    echo "<div>" . time() . ": Iteration ".$_GET['counter']."</div>";
?>

我想你知道这不是一个适合网络计数器的解决方案,但你可能正在JQuery/AAJX/PHP中进行实验/测试。