如何检查 PHP 网站是否完全加载了 JS

3
所以我有一个index.php文件,其中包含像这样的一些Div:
<div id="thisDiv">
    <?php ?>
<div>

另外在一个JS文件中,我有一个名为divRefresh的函数:

function divRefresh(id, path){
    $(id).load(path, function(){
        functionToBeCalledWhenLoaded();
    });
}

其中ID应该是从div获取的id,PATH是php文件在服务器上的路径。

我的问题是load()函数在我的.php页面完全加载之前就调用了functionToBeCalledWhenLoaded()

已尝试解决方案:
回调函数。
内联<script>调用。(这个解决方案只在一些人身上起作用)
jquery ready(),onload(),load()

如何在调用JS函数之前检查我的php页面是否完全加载?


https://api.jquery.com/ready/如果您不想加载jQuery,则可以使用<body onload...>,或者将初始JS调用放在页面的末尾。例如:<script>callme();</script></body></html> - Marc B
$(window).load(function() { 在此处执行操作 }) 这会等待页面完全加载后再调用函数中的操作。 - Pete
我的情况下$(document).ready()不起作用,因为我在其中使用ready()来调用divRefresh(id, path),并且将其放置在函数调用下面也不起作用。它完全异步加载.php页面。我将尝试使用$(window).load()并告诉您是否有效。 - alexluz
2个回答

2

看起来DOM已经准备就绪,而PHP服务器仍在发送数据。以下是一些建议,可以说服浏览器理解这种情况。首先,尝试关闭然后重新启动。如果没有帮助:

建议1

尝试发送header("Content-Length: ...") - 这可能会说服浏览器等待直到所有数据都发送完毕。当然,...是生成的HTML的字节大小。

建议2

尝试使用输出缓冲:

<?php ob_start();?>
<div id="thisDiv">
    <?php ?>
<div>
<?php ob_end_flush();?>

服务器会等待HTML完全生成,然后将其发送给客户端,所以最后的数据将是...</html>,之后DOM将准备就绪,JS加载将启动。至少我希望如此。

建议三

在您放置在thisDiv内的php代码结尾处插入这行代码。

<img src="pixel.gif" onload="functionToBeCalledWhenLoaded()">

其中pixel.gif是一张真正的1像素透明图片,所以该函数将在php部分完成后启动。当DOM准备就绪并发送相关数据时,此方法可以运行,同时浏览器等待更多数据。


最后,也是最重要的,可能是缓存问题。作为最后的手段,您可以使用setTimeout(functionToBeCalledWhenLoaded,1000)再等待一秒钟,希望页面在延迟后真正准备就绪。这将是一种不错的duct-tape反模式,是绝望的表现。


这正是我的问题,PHP服务器端花费太长时间来发送整个页面。我认为解决方案3是最好的,因为它允许我不必改变太多我的代码。.onload()函数只有在所有图像加载完成后才完全完成,所以理论上我也可以在我的php页面末尾放置一个<img>,并在.js文件中使用.onload(callback),它应该可以工作。非常感谢!这已经是你在不到2天的时间里第二次帮助我了!如果可以的话,我会亲吻你! - alexluz
我很高兴能够帮助你。请注意,当DOM中的所有图像加载完成时,onload将在window对象上调用;如果在img上调用,则仅在特定图像加载时调用。在您的情况下,局部DOM的图像可以加载,而PHP服务器仍然在该div内发送一些数据,因此onload可能会过早触发。如果onload在img上,则可以保证先前的PHP输出已被发送。我对浏览器处理onload的假设仍可能错误,需要进行测试。 - Jan Turoň
最好选择输出缓冲。它可以提高性能。 - Shanavas M

1
如果你使用jQuery,你可以将代码放在以下两个函数之间:$(document).ready(function() { } 或者简写的 $(function(){ } 如果你不使用jQuery: window.onload = function(){ }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接