使用setvalue运行循环

using setvalue to run a loop

本文关键字:循环 运行 setvalue 使用      更新时间:2023-09-26

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数组中存储的值中更改"推荐"的文本。

问题是php变量$i没有得到更新。仅保持1

您混合了服务器端逻辑(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);

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

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

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

关于如何混合PHP和Javascript,请参阅以下答案。

我编写了这段代码,它正在运行。正如上面的人告诉您的,服务器端不能使用客户端迭代或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>