如何检查 php 网站是否完全加载了 JS
How to check if php website was completely loaded with JS
所以我有一个 index.php,里面有一些像这样的 Div:
<div id="thisDiv">
<?php ?>
<div>
在另一个 JS 文件中,我有一个 div 刷新函数,如下所示:
function divRefresh(id, path){
$(id).load(path, function(){
functionToBeCalledWhenLoaded();
});
}
其中 ID 是来自 div 的 ID,PATH 是 php 文件在服务器中的路径。
我的问题是 load()
函数甚至在我的 .php
页面完全加载之前就调用了 functionToBeCalledWhenLoaded()
。
尝试过的解决方案:
回调函数。
内联 <script>
调用。 (此解决方案仅适用于某些人)
jquery ready()
,onload()
,load()
如何在调用 JS 函数之前检查我的 php 页面是否已完全加载?
如果您使用 jQuery,您可以将代码放在:
之间
$(document).ready(function() { }
或 shorthand 版本 $(function(){ }
如果您不使用 jquery:
window.onload = function(){ }
似乎 DOM 已准备就绪,而 PHP 服务器仍在发送数据。这里有一些建议可以说服浏览器了解情况。首先,尝试将其关闭并重新打开。如果没有帮助:
建议 1
尝试发送 header("Content-Length: ...")
- 它可能会说服浏览器等待所有数据发送完毕。 ...当然是生成的HTML的字节大小。
建议 2
尝试使用输出缓冲:
<?php ob_start();?>
<div id="thisDiv">
<?php ?>
<div>
<?php ob_end_flush();?>
服务端会等到html完全生成后再发送给客户端,所以最后的数据是...</html>
,之后DOM会准备好,然后 JS 加载将启动。至少我希望如此。
建议 3
在您放入 thisDiv
的 php 代码末尾,插入此行
<img src="pixel.gif" onload="functionToBeCalledWhenLoaded()">
其中 pixel.gif 是一些真正的 1px 不可见图像,因此该功能将在 php 部分完成后启动。当 DOM 准备好并发送相关数据时,这可能会起作用,同时浏览器等待更多数据。
最后但同样重要的是,这可能是一些缓存问题。作为最后的手段,您可以使用 setTimeout(functionToBeCalledWhenLoaded,1000)
再等一秒钟,并希望页面在延迟后真正准备就绪。这将是胶带反模式的一个很好的例子,一种纯粹的绝望行为。
所以我有一个 index.php,里面有一些像这样的 Div:
<div id="thisDiv">
<?php ?>
<div>
在另一个 JS 文件中,我有一个 div 刷新函数,如下所示:
function divRefresh(id, path){
$(id).load(path, function(){
functionToBeCalledWhenLoaded();
});
}
其中 ID 是来自 div 的 ID,PATH 是 php 文件在服务器中的路径。
我的问题是 load()
函数甚至在我的 .php
页面完全加载之前就调用了 functionToBeCalledWhenLoaded()
。
尝试过的解决方案:
回调函数。
内联 <script>
调用。 (此解决方案仅适用于某些人)
jquery ready()
,onload()
,load()
如何在调用 JS 函数之前检查我的 php 页面是否已完全加载?
如果您使用 jQuery,您可以将代码放在:
之间$(document).ready(function() { }
或 shorthand 版本 $(function(){ }
如果您不使用 jquery:
window.onload = function(){ }
似乎 DOM 已准备就绪,而 PHP 服务器仍在发送数据。这里有一些建议可以说服浏览器了解情况。首先,尝试将其关闭并重新打开。如果没有帮助:
建议 1
尝试发送 header("Content-Length: ...")
- 它可能会说服浏览器等待所有数据发送完毕。 ...当然是生成的HTML的字节大小。
建议 2
尝试使用输出缓冲:
<?php ob_start();?>
<div id="thisDiv">
<?php ?>
<div>
<?php ob_end_flush();?>
服务端会等到html完全生成后再发送给客户端,所以最后的数据是...</html>
,之后DOM会准备好,然后 JS 加载将启动。至少我希望如此。
建议 3
在您放入 thisDiv
的 php 代码末尾,插入此行
<img src="pixel.gif" onload="functionToBeCalledWhenLoaded()">
其中 pixel.gif 是一些真正的 1px 不可见图像,因此该功能将在 php 部分完成后启动。当 DOM 准备好并发送相关数据时,这可能会起作用,同时浏览器等待更多数据。
最后但同样重要的是,这可能是一些缓存问题。作为最后的手段,您可以使用 setTimeout(functionToBeCalledWhenLoaded,1000)
再等一秒钟,并希望页面在延迟后真正准备就绪。这将是胶带反模式的一个很好的例子,一种纯粹的绝望行为。