我正在开发一个使用asp.NET mvc3的应用程序。 我创建了一个局部视图,并在视图中调用了这个局部视图,这样我就可以在不重新加载页面的情况下更新div。 我使用setTimeout(但我也尝试了setInterval)来定义刷新时间。 问题是它不起作用,它随机刷新div,而不是按照我设置的时间,并且没有我可以理解的逻辑,有时它刷新两次,有时等待,但永远不会超过时间我设置。 这是局部视图的代码。在视图中我只是调用局部视图。
<script type="text/javascript">
var st;
function updateDiv() {
st = null;
clearTimeout(st);
console.log("posting");
$.post('@Url.Action("RefreshSelfUpdatingPartial")', function (data) {
$('#SelfUpdatingPartialDiv').hide().slideDown("slow").html(data);
//wait 15 seconds
st = setTimeout(updateDiv, 15000);
});
}
updateDiv();
</script>
<div id="SelfUpdatingPartialDiv">
test
</div>
答案 0 :(得分:2)
“这是局部视图的代码。在视图中我只调用局部视图。”
如果以上所有代码都在局部视图中,那么这并不意味着$.post()
会将上述所有内容加载到<div>
中,从而产生第二个副本上面嵌套在里面?随着超时的运行,它只会在自身内部嵌入越来越多的副本。
我建议您将以上所有内容移到主视图中,然后部分视图应该只返回您想要在<div>
中看到的任何文本(并且没有JavaScript)。
(如果这不是我所引用的陈述的意思,请更新您的帖子,以更清楚地解释上述代码所在的位置以及$.post('@Url.Action("RefreshSelfUpdatingPartial"))
实际返回的内容。)
(另外,就像Alex说的那样,在将st
变量传递给null
之前,请不要将clearTimeout()
变量设置为{{1}} - 尽管我认为你可以删除这两行,因为你不知道需要在触发后清除超时。)