用于更新MVC3中的局部视图的SetTimeout随机执行

时间:2011-08-10 06:54:41

标签: c# javascript asp.net ajax asp.net-mvc-3

我正在开发一个使用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>

1 个答案:

答案 0 :(得分:2)

  

“这是局部视图的代码。在视图中我只调用局部视图。”

如果以上所有代码都在局部视图中,那么这并不意味着$.post()会将上述所有内容加载到<div>中,从而产生第二个副本上面嵌套在里面?随着超时的运行,它只会在自身内部嵌入越来越多的副本。

我建议您将以上所有内容移到主视图中,然后部分视图应该只返回您想要在<div>中看到的任何文本(并且没有JavaScript)。

(如果这不是我所引用的陈述的意思,请更新您的帖子,以更清楚地解释上述代码所在的位置以及$.post('@Url.Action("RefreshSelfUpdatingPartial"))实际返回的内容。)

(另外,就像Alex说的那样,在将st变量传递给null之前,请不要将clearTimeout()变量设置为{{1}} - 尽管我认为你可以删除这两行,因为你不知道需要在触发后清除超时。)