0

我不明白为什么我没有看到 div 中显示的每个数字。

我的代码...

<head>
    <script>
        function countit(i)
        {
            document.getElementById('counter').innerHTML = i;
        }
    </script>
</head>
<body>

<div id="counter"></div>

<script>countit(1)</script>
<?php sleep(1); ?>
<script>countit(2)</script>
<?php sleep(1); ?>
<script>countit(3)</script>

</body>

我有一个 php 脚本,它处理数据库中的多条记录,我想显示正在处理的当前记录的计数器。我认为JS是做到这一点的方法。我看到了与上面推荐的代码非常相似的东西。

任何见解将不胜感激。

4

4 回答 4

2

PHP 缓冲输出并且在它完成运行之前不发送页面。睡眠不会在脚本元素的执行之间运行。

改写你的逻辑以使用JavaScriptsetInterval

或者,在 PHP 脚本中禁用或避免输出缓冲,但请注意,这可能会影响浏览器缓存页面的能力。

于 2013-02-27T20:35:23.357 回答
0

问题是您的 php 代码在您的服务器上执行,而您需要在客户端 (JavaScript) 上执行代码才能使其工作:

<script>
  var idx = 1;
  var doCount= function(){
      if(idx >= 3) return;
      countit(idx);
      setTimeout(doCount,1000);         
  };
  doCount();


</script>

删除以下内容:

<?php sleep(1); ?>
<script>countit(2)</script>
<?php sleep(1); ?>
<script>countit(3)</script>
于 2013-02-27T20:36:26.877 回答
0

PHP是服务器端语言,而Javascript是客户端语言。我猜你只是3在你的counterdiv中看到。原因是 PHPsleep(1)在页面渲染之前就已经发生了。您需要setInterval在 Javascript 中使用 a 来完成您正在尝试做的事情。

于 2013-02-27T20:37:02.733 回答
0

您的代码等待 2 秒,浏览器收到:

<head>
    <script>
        function countit(i)
        {
            document.getElementById('counter').innerHTML = i;
        }
    </script>
</head>
<body>

<div id="counter"></div>

<script>countit(1)</script>

<script>countit(2)</script>

<script>countit(3)</script>

</body>

这可能不是你想要的。让我们尝试这样的事情:

<script>
    var i = 1;
    function counter()
    {
       if (i < 4)
       {
         countit(i);
         i++;
         window.setTimeout(counter,1000);
       }
    }

    counter();
</script>
于 2013-02-27T20:46:17.867 回答