如何使用ob_flush()在PHP执行后使div消失
我有一个PHP文件,我想在它完全加载时向访问者显示加载的文本或图像。 据我所知,我应该使用如何使用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 ?> 有了这段代码,一切正
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