使用php和ajax逐个循环打印而不是一次打印

时间:2014-09-16 05:44:59

标签: php ajax counter

我试图逐个打印出循环迭代,而不是使用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();
     } 

    ?>

2 个答案:

答案 0 :(得分:0)

由于您发布请求循环后获取响应并将响应还原为ajax方法 循环执行得这么快,你需要在循环执行这么多时间就睡眠循环,这样一旦你得到一个结果后再循环执行,你又得到一个响应

请按照此超时功能暂停一段时间

我属于你在整个循环中传递的参数,并没有失去动态值......

> (function(i){
>         setTimeout(function(){
> 
> }, 1000 * i);
>     }(i));

答案 1 :(得分:0)

这是真的。如果执行完整的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 / AJAX / PHP进行实验/测试。