使用 setvalue 到 运行 一个循环

using setvalue to run a loop

HTML:

<section class="clientbox">
    <div class="container">
        <div class="col-lg-10 col-lg-offset-1">
            <h2>WHAT CLIENT SAYS</h2>
            <h4>POSITIVE REVIEWS FOR LOVING PROBLAM.COM </h4>
            <p id="testimonial"><?php echo $alldata[0]['text'] ?></p>
         </div>
    </div>    
</section>

javascript:

<script type="text/javascript">
<?php $i = 1; ?>
    setInterval(function()
        {
            document.getElementById('testimonial').innerHTML = "<?php echo $alldata[$i]['text'] ?>";
            <?php $i++; ?>
        }, 3000);

实际上我想做的是每 3 秒从存储在 $alldata 数组中的值更改 'testimonial' 的文本。

问题是 php 变量 $i 没有得到更新。它只保留 1。

你不能这样混用 PHP 和 Javascript。 PHP 首先运行,生成一些数据供 Javascript 解释。从Javascript的角度来看,它只能看到这个:

<script type="text/javascript">
    setInterval(function()
        {
            document.getElementById('testimonial').innerHTML = "some data";
        }, 3000);
</script>

您需要将所有数据传递给 Javascript 以便它可以对其进行迭代。

See this answer for how to mix PHP and Javascript.

您将服务器端逻辑 (PHP) 与客户端逻辑 (JavaScript) 混合在一起。

当客户端请求您的网页时,PHP 呈现包含 HTML、CSS、JavaScript 和其他一些内容的内容,并由 Web 服务器发送这些内容内容到客户端。

Web 浏览器接收这些内容,然后执行 JavaScript 并根据样式呈现 HTML。

您需要在服务器端生成JavaScript setInterval需要的所有内容,并调整您的JavaScript逻辑来迭代这些数据。

逻辑可能如下所示。我不熟悉 PHP,不确定这是否有效。 JavaScript 不检查所有数据是否已被消耗。

<script type="text/javascript">
    <?php
    function get_data($e) {
        return($e['text']);
    }
    $data = array_map("get_data", $alldata);
    ?>
    var js_alldata = <?php echo json_encode($data) ?>;
    var i = 1;
    setInterval(function()
        {
            document.getElementById('testimonial').innerHTML = js_alldata[i % js_alldata.length];
            i++;
        }, 3000);

我已经编写了这段代码并且可以正常工作。正如上面的人告诉你的,服务器端不能与客户端迭代或 setIntervals 一起工作,因此你应该事先发送整个数据。

示例:

$array = array();
$array[0]['text'] = 'hi';
$array[1]['text'] = 'hey';
$array[2]['text'] = 'hou';
$js_array = json_encode($array);

?>

<p id="testimonial"><?php echo $array[0]['text'] ?></p>

<script>
    var json;
    var i=1;

    json = <?php echo $js_array; ?>

    setInterval(function()
    {
        document.getElementById('testimonial').innerHTML = json[i]['text'];
        i++;
    }, 3000);
    console.log(json);
</script>