在MVC3中更新局部视图的SetTimeout是随机执行的
本文关键字:SetTimeout 随机 执行 视图 MVC3 更新局 | 更新日期: 2023-09-27 18:04:55
我正在开发一个使用asp的应用程序。净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>
"这是部分视图的代码。在视图中,我叫它分部视图。"
如果上面所有的代码都在局部视图中,这是否意味着$.post()
将把上面所有的代码加载到<div>
中,导致上面的第二个副本嵌套在自己内部?当超时运行时,它会继续在自身内部嵌套越来越多的副本。
我建议您将上述所有内容移动到您的主视图中,然后部分视图应该只返回您想要在<div>
中看到的任何文本(而不是JavaScript)。
(如果这不是我引用的语句的意思,那么请更新您的帖子,以更清楚地解释上述代码的位置以及$.post('@Url.Action("RefreshSelfUpdatingPartial"))
实际返回的内容。)
(另外,就像Alex说的,不要将st
变量设置为null
,然后将其传递给clearTimeout()
-尽管我认为您可以删除两行,因为您不需要在它已经触发后清除超时)