【问题标题】:using setvalue to run a loop使用 setvalue 运行循环
【发布时间】:2015-07-25 13:00:43
【问题描述】:

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 数组,然后使用您的 javascript 函数引用该 javascript 数组。
  • @RamRaider- 这是我正在做的事情。如果我在这方面遇到问题,会回复你。
  • @RamRaider- 我无法进行转换。你能告诉我怎么做吗?
  • 嗨@Nick,下面的一些人提供了替代解决方案,他们还表示您无法将服务器端与客户端混合使用!看看 Marcos Segovia 的代码 - 看起来它会满足你的需求

标签: javascript php html setvalue


【解决方案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);

【讨论】:

    【解决方案2】:

    你不能像那样混合 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.

    【讨论】:

    • 这是我目前正在做的事情。但出于好奇,我问了这个问题。
    【解决方案3】:

    我已经编写了这段代码并且它正在工作。正如上面的人告诉你的,服务器端不能与客户端迭代或 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>
    

    【讨论】:

    • 这真的很有帮助。非常感谢你,伙计。现在我再次想要将 i 重置为 1,如果它的值达到大于 4。我在 i++ 之后使用此代码:- if(i > 4) {i = 1;}
    猜你喜欢
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    相关资源
    最近更新 更多