【发布时间】:2012-02-01 01:53:08
【问题描述】:
我正在尝试使用 jQuery 来进行更复杂的页面刷新。使用元刷新,如果页面无法加载一次,它将不会再次加载。我正在尝试制作一些会反复尝试加载的东西-如果它无法加载一次,它将在下一次重试,这样如果最后一次加载成功,我将看到页面的新版本,无论是否存在是干预故障。
我目前的代码是:
<script language="JavaScript" type="text/javascript" src="/include/jquery.js">
</script>
<script language="JavaScript">
var delay=5*1000;
function load(){
setTimeout(load, delay);
jQuery("#content").load("calendar_internal.cgi?days=40", function(){
jQuery("#preload").hide("slow");
});
delay = 15*60*1000;
}
jQuery("#content").load("calendar_internal.cgi?days=40", load);
</script>
据我所知,这是一个 noop。它不会刷新。
我怎样才能让它至少在基本级别上工作,以便它刷新但一次糟糕的刷新并不意味着如果我想查看页面就必须重新加载?
--编辑--
我现在所拥有的显然正在工作(经过轻度测试):
<script language="JavaScript">
var placeholder = jQuery('<div></div>');
function load(){
setTimeout(load, 15*60*1000);
placeholder.load("logistic_ajax.cgi", function(){
if (placeholder.html())
jQuery('#content').html(placeholder.html());
})
}
load();
</script>
【问题讨论】:
-
为什么在load函数第一行的setTimeout中调用load函数?
-
为了稳定。想法是,首先设置下一次运行,然后尝试网络加载,这样如果网络加载失败,您不会丢失超过一次尝试的加载。
-
也许我没有看到这里的逻辑,但这不是无限递归调用吗? load 函数的第一行调用 setTimeout 调用 load 函数等等。
-
第一次加载调用 setTimeout 并完成。第二次加载调用 setTimeout 并完成。第三次加载调用 setTimeout 并完成。它是无限递归,但在堆栈上没有无限深度。
标签: javascript jquery refresh reload