【问题标题】:How to check if php website was completely loaded with JS如何检查php网站是否完全加载了JS
【发布时间】:2015-07-06 14:37:12
【问题描述】:

所以我有一个 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()

尝试过的解决方案:
回调函数。
内联&lt;script&gt; 调用。 (此解决方案仅适用于某些人)
jquery ready(),onload(),load()

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

【问题讨论】:

  • api.jquery.com/ready 如果您不想加载 jquery,请使用 &lt;body onload...&gt;,或者将初始 JS 调用填入页面的 END。例如&lt;script&gt;callme();&lt;/script&gt;&lt;/body&gt;&lt;/html&gt;
  • $(window).load(function() { do stuff here }) 这应该等到页面完全加载后再调用函数中的内容
  • $(document).ready() 在我的情况下不起作用,因为我使用ready() 在其中调用divRefresh(id, path),并将其置于函数调用之下,不起作用任何一个。它完全异步加载.php 页面。我会尝试$(window).load() 并判断它是否有效。

标签: javascript php jquery callback


【解决方案1】:

似乎 DOM 已准备就绪,而 PHP 服务器仍在发送数据。这里有一些建议可以说服浏览器了解情况。首先,尝试将其关闭并重新打开。如果没有帮助:

建议一

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

建议二

尝试使用输出缓冲:

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

服务器会等到 html 完全生成后再发送给客户端,所以最后的数据是...&lt;/html&gt;,之后 DOM 准备就绪,然后启动 JS 加载。至少我希望如此。

建议三

在你放入thisDiv的php代码的末尾,插入这一行

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

其中 pixel.gif 是一些真正的 1px 不可见图像,因此该函数将在 php 部分完成后启动。当 DOM 准备好并发送相关数据,而浏览器等待更多数据时,这可能会起作用。


最后但并非最不重要的一点是,它可能是一些缓存问题。作为最后的手段,您可以使用setTimeout(functionToBeCalledWhenLoaded,1000) 再等待一秒钟,并希望页面在延迟后真正准备好。这将是胶带反模式的一个很好的例子,这是一种完全绝望的行为。

【讨论】:

  • 这正是我的问题,PHP 服务器端发送整个页面的时间太长。我认为解决方案 3 是最好的解决方案,因为如果允许我不要更改太多代码。 .onload()函数只有在所有图像都加载完成后才完成,所以理论上我也可以在我的php页面末尾放置一个&lt;img&gt;,并在.js文件中放置一个.onload(callback),它应该工作。非常感谢你!居然是你不到2天第二次救我!!如果可以,我会吻你!
  • 我很乐意提供帮助。请注意,当加载 DOM 的所有图像时,在 window 对象上调用的 onload 会触发。如果在 img 上调用,它会在加载该特定图像时触发。在您的情况下,可以加载部分 DOM 的图像,而 PHP 服务器仍会在该 div 内发送一些数据,因此 onload 仍可能过早触发。如果 onload 在 img 上,则保证之前的 PHP 输出已发送。关于浏览器如何处理 onload 的假设我仍然可能是错误的,它需要进行测试。
  • 最好使用输出缓冲。它还可以提高性能。
【解决方案2】:

如果你使用 jQuery,你可以把代码放在:

$(document).ready(function() { } 或简写版本$(function(){ }

如果你不使用 jquery:

window.onload = function(){ }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多