【问题标题】:How do I echo a variable then delete everything on the page and repeat如何回显变量然后删除页面上的所有内容并重复
【发布时间】:2019-03-28 21:59:30
【问题描述】:

我一直在尝试在脚本运行时回显变量。我有那部分工作。但是,我想删除页面上的所有内容,然后回显并重复。我在stackoverflow上搜索过,并尝试了他们的解决方案,但它仍然对我不起作用。示例:

  1. 删除页面上的所有内容(使其空白)。
  2. 回显$i
  3. $i += 1
  4. 重复

PHP 版本:7.2.10 运行于:XAMPP

script.php:

<?php

$i = 0;
while ($i < 999999999) {
    echo $i;
    flush();
    ob_flush();
    sleep(1);
    $i += 1;
}

发生的事情是页面没有删除页面上的所有内容,因此它最终看起来像:

09:00:00

0

09:00:01

01

09:00:02

012

我希望它是这样的:

09:00:00

0

09:00:01

1

09:00:02

2

【问题讨论】:

  • Ross - 刷新数据正是这样做的 - 脚本中的任何内容都不会清除显示。为此,您可能想研究一下带有 ajax 的 Javascript 之类的东西,这样您就可以与您的 PHP 后端进行通信
  • @DerekPollard php 中有什么函数可以做到吗?
  • 不,这将是 javascript 处理的事情。除非你有 PHP 只是简单地每 X 秒刷新一次分页,我不推荐这样做
  • @DerekPollard 抱歉,这个问题有点离题,但你让我非常担心。 Javascript在客户端执行。这意味着使用 Javascript 我可以调用 PHP 函数。这是否意味着人们可以编辑源代码(通过按F12 使用谷歌浏览器,然后在元素部分编辑代码)并执行我的任何 php 函数,如果他们知道我的 php 函数的名称?
  • php 在服务器端运行。这意味着客户只得到你发送给他们的东西。纯文本、html 文件、json 或任何你想要的。这意味着,当内容一旦发送到客户端时,服务器就无法清除客户端的显示/页面。如果你想改变页面的内容,使用 ajax 调用从 js 到你的网络服务器来接收你想要的内容。

标签: php xampp flush


【解决方案1】:

试试这个,在while循环中用JS清空页面

$i = 0;
        while ($i < 10) {
            echo $i;
            flush();
            ob_flush();
            sleep(1);
            $i += 1;
            echo "<script type='text/javascript'>";
            echo "document.body.innerHTML = ''";
            echo "</script>";
        }

【讨论】:

  • 这不是要打印很多js部分,html代码都会被这个代码填满吗?因此,占用大量内存?
  • @Ross 大量内存?不是在服务器端,根本不是在客户端,嗯,今天的计算机有许多 GB 的 RAM。上面的代码总计大约 1 KB...
  • @Ross 我不知道那个 ngl,但我认为它不会占用太多,因为它是非常简单的代码。你的要求很奇怪,我看不出有很多其他方法可以做到这一点。
  • 我认为你担心的是错误的事情@Ross - 这些天网站发布的 JavaScript 比以往任何时候都多。
  • 这段代码会显示一个白屏 - php 是一种服务器端语言,只显示结果。
【解决方案2】:

如果我没记错的话,实现这一点的唯一方法是 javascript 或 CSS,因为 PHP 中的“输出”始终显示在客户端,而且如您所知,PHP 不会在客户端更改任何内容。

<?php                                      
$i = 0;
   while ($i < 999999999) {
 echo '<div style="position:absolute;margin-left:0;margin-top:0;background:white;width:15px;">&nbsp;</div>'; // to clean
 echo '<div style="position:absolute;margin-left:0;margin-top:0">'.$i.'</div>'; // to show in same place.
flush(); 
ob_flush(); 
sleep(1);
$i += 1;
}
?>

无论如何,希望这对您有所帮助。

【讨论】:

  • 如果我这样做,这将很快消耗客户的内存
  • 这个提示看起来像一个“家庭作业”,但这不是我关心的问题。无论在哪里.. 我认为仅使用 PHP 无法实现,因为您知道,仅控制服务器端,而不是输出位置(客户端)。
猜你喜欢
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 2018-04-03
相关资源
最近更新 更多