如何检查 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) 再等一秒钟,并希望页面在延迟后真正准备就绪。这将是胶带反模式的一个很好的例子,一种纯粹的绝望行为。