如何使用ob_flush()在PHP执行后使div消失

如何使用ob_flush()在PHP执行后使div消失,php,Php,我有一个PHP文件,我想在它完全加载时向访问者显示加载的文本或图像。 据我所知,我应该使用ob_flush()以执行此操作。 我尝试了以下代码: <?php ob_start(); echo '<div> Loading </div>'; ob_end_flush(); ob_flush(); flush(); ob_start(); ob_clean(); //my php code //my php code ?> 有了这段代码,一切正

我有一个PHP文件,我想在它完全加载时向访问者显示加载的文本或图像。 据我所知,我应该使用
ob_flush()以执行此操作。
我尝试了以下代码:

<?php

ob_start();

echo '<div> Loading </div>';

ob_end_flush();

ob_flush();
flush();

ob_start();
ob_clean();

//my php code
//my php code

?>

有了这段代码,一切正常,加载文本首先出现,然后PHP异常开始。但我的问题是,在PHP执行完成后,加载的文本仍然在页面上,并且不会消失


请帮我解决这个问题:)

不,这不是
ob\u flush()
的用途。使用像PHP这样的服务器端语言是完全不可能的。您必须改用javascript

以下是对请求PHP网页时发生的情况的粗略简化且并非100%准确的描述:

  • 浏览器向服务器发送请求“嘿,服务器,给我主页”
  • 服务器运行用于主页的PHP脚本
  • 通常,PHP脚本将生成一些输出。服务器将收集此输出
  • 脚本完成后,服务器会说“OK Browser,这是您的主页”,将输出(响应)发送到浏览器,然后关闭连接
  • 现在连接已关闭,服务器已经忘记浏览器在1秒前甚至请求了一个页面
  • 浏览器将愉快地显示新收到的网页。对于PHP脚本,现在无法在浏览器中实现某些操作
  • 这就是所谓的请求-响应模式,它在某种程度上仍然是web的基础

    那么,你现在如何获得你的加载覆盖?当您可以接受加载覆盖在初始页面请求上不起作用,但每次用户在您的站点上点击链接时,您可以使用以下简单方法

    
    荷载叠加试验
    document.addEventListener(
    “点击”,
    函数(){
    if(event.target.matches('a')){
    document.body.innerHTML=“正在加载下一页…”;
    }
    },
    错误的
    );
    
    如果页面加载速度快,可能看不到效果。我用一些纯文本尽可能简单地保存了这个示例,而不是一个真正的加载覆盖,您可以使用它作为起点

    当第一页请求绝对需要覆盖时,事情会变得更加复杂。以下是一个不支持生产且无ajax的示例:

    
    加载页面
    正在加载第一页。。。
    //这将立即请求“真实”页面
    window.location.replace(window.location.href+'?fetch_real_page=1');
    真正的页面
    //为辅助请求设置加载覆盖
    document.addEventListener(
    “点击”,
    函数(){
    if(event.target.matches('a')){
    document.body.innerHTML=“正在加载下一页…”;
    }
    },
    错误的
    );
    
    需要考虑的事项:

  • 您需要使用
    fetch\u real\u page=1扩展每个内部链接
  • 迟早您需要处理额外的$\u GET参数,因此您必须扩展此代码,或者切换到cookies或会话,以检查请求是否为次要请求
  • 这条路的尽头将是一个javascript/ajax驱动的单页应用程序,但我认为这超出了您的问题范围
  • 小心这种无法阅读的PHP标签和HTML的混合,像这样的代码是不受欢迎的。这仅用于演示

  • 不,这不是
    ob\u flush()
    的用途。使用像PHP这样的服务器端语言是完全不可能的。您必须改用javascript

    以下是对请求PHP网页时发生的情况的粗略简化且并非100%准确的描述:

  • 浏览器向服务器发送请求“嘿,服务器,给我主页”
  • 服务器运行用于主页的PHP脚本
  • 通常,PHP脚本将生成一些输出。服务器将收集此输出
  • 脚本完成后,服务器会说“OK Browser,这是您的主页”,将输出(响应)发送到浏览器,然后关闭连接
  • 现在连接已关闭,服务器已经忘记浏览器在1秒前甚至请求了一个页面
  • 浏览器将愉快地显示新收到的网页。对于PHP脚本,现在无法在浏览器中实现某些操作
  • 这就是所谓的请求-响应模式,它在某种程度上仍然是web的基础

    那么,你现在如何获得你的加载覆盖?当您可以接受加载覆盖在初始页面请求上不起作用,但每次用户在您的站点上点击链接时,您可以使用以下简单方法

    
    荷载叠加试验
    document.addEventListener(
    “点击”,
    函数(){
    if(event.target.matches('a')){
    document.body.innerHTML=“正在加载下一页…”;
    }
    },
    错误的
    );
    
    如果页面加载速度快,可能看不到效果。我用一些纯文本尽可能简单地保存了这个示例,而不是一个真正的加载覆盖,您可以使用它作为起点

    当第一页请求绝对需要覆盖时,事情会变得更加复杂。以下是一个不支持生产且无ajax的示例:

    
    加载页面
    正在加载第一页。。。
    //这将立即请求“真实”页面
    window.location.replace(window.location.href+'?fetch_real_page=1');
    真正的页面
    //为辅助请求设置加载覆盖
    文件.addEv