所以我有一个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()
页面已完全加载,functionToBeCalledWhenLoaded()
函数也会调用.php
。
尝试解决方案:
回调函数。
内联<script>
来电。 (这个解决方案只与一些人合作)
jquery ready()
,onload()
,load()
如何在调用JS函数之前检查我的php页面是否已完全加载?
答案 0 :(得分:2)
似乎DOM已准备好,而PHP服务器仍然发送数据。在这里,您可以提出一些可能说服浏览器了解情况的建议。首先,尝试将其关闭再打开。如果它没有帮助:
尝试发送header("Content-Length: ...")
- 它可能会说服浏览器等到所有数据都发送完毕。当然,...是生成的HTML的字节大小。
尝试使用输出缓冲:
<?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是一些真正的1px不可见图像,因此该函数将在php部分完成后启动。当DOM准备好并发送相关数据时,这可能会起作用,而浏览器会等待更多数据。
最后,但并非最不重要的是,它可能是一些缓存问题。作为最后的手段,您可以使用setTimeout(functionToBeCalledWhenLoaded,1000)
等待一秒钟,并希望页面在延迟后真正准备就绪。这将是一个很好的塑料管道反模式的例子,绝对绝望。
答案 1 :(得分:1)
如果您使用jQuery,可以将代码放在:
之间 $(document).ready(function() { }
或简写版$(function(){ }
如果您不使用jquery:
window.onload = function(){ }