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

コードは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 に答える
0

PHP はサーバー側の言語であり、Javascript はクライアント側の言語です。あなたは単にdiv3で見ているだけだと思います。counterその理由はsleep(1)、ページがレンダリングされる前に PHP が実行されているためです。setIntervalやろうとしていることを達成するには、Javascript でa を使用する必要があります。

于 2013-02-27T20:37:02.733 に答える
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 に答える