【问题标题】:How To Display PHP Loop Results Instantly Using JS Script如何使用 JS 脚本立即显示 PHP 循环结果
【发布时间】:2013-02-28 10:46:31
【问题描述】:

这是我希望每秒打印消息的代码示例。

set_time_limit(60);

foreach($array as $key => $value)
{
    echo $value;

    sleep(5);
}

我想知道一个 JS 脚本应该如何在循环的每个步骤中立即输出 $value 的结果而不等到它停止?

【问题讨论】:

  • 使用AJAX并调用PHP数据。
  • 输出缓冲可能是最好的方法。 (工厂打败了我 :))

标签: php javascript loops output


【解决方案1】:

您无法使用 JavaScript 访问 PHP 变量。 JavaScript 在浏览器中运行,而 PHP 在服务器上运行。

您必须使用 fab 的解决方案,并使用 echoflush() 将当前输出缓冲区发送到浏览器。但是一旦你这样做了,就不再需要使用 JavaScript,因为无论如何文本都会显示出来。

foreach($array as $key => $value)
{
    echo $value;
    flush();

    sleep(5);
}

【讨论】:

    【解决方案2】:

    Javascript 可以(并且应该)为您完成所有计时工作,将数组输出为编码的 JSON 字符串会更明智,该字符串可以作为 javascript 变量打印到您的 HTML 中。

    <script>
    var array = "<?php echo json_encode($array); ?>";
    </script>
    

    然后您可以轻松地使用 javascript 解析数组,并使用浏览器以 1 秒的间隔显示每条消息。将数组从 JSON 字符串转换回类似...

    var clearInterval = setInterval(deliver_message,1000); // Run a function every second
    
    function deliver_message() {
        document.write(array.shift()); //This could be a Jquery append, or similar
        if (array.length == 0)
            clearInterval(loop);
    }
    

    您的服务器端处理将所有信息传递给浏览器,它是客户端...javascript...用于操纵它的显示方式。

    【讨论】:

      【解决方案3】:

      为什么选择 JavaScript?

      您可以在脚本完成之前随时使用flush() 发送输出:

      set_time_limit(60);
      
      foreach($array as $key => $value)
      {
          echo $value;
          flush();
      
          sleep(5);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 2019-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        相关资源
        最近更新 更多