在MVC3中更新局部视图的SetTimeout是随机执行的
SetTimeout to update a Partial View in MVC3 executes randomly
我正在开发一个使用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()
-尽管我认为您可以删除两行,因为您不需要在它已经触发后清除超时)
相关文章:
- setInteval vs setTimeout
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- $(document).height()在刷新时随机化值(Safari 5.1.10)
- 使用当前日期生成随机id
- setTimeout可以与闭包内的函数一起使用吗
- Javascript setTimeout for an array
- 刷新后,setTimeout将工作或不工作
- 从a-z中随机选择一个字母
- 继续使用javascript中的setTimeout
- setTimeout函数能否在其前面的代码执行之前激发
- jQuery setTimeOut: in for-loop
- RequireJ无法随机加载脚本
- 单击按钮时显示随机字符串
- SetTimeout and clearTimeout in Javascript
- 在setTimeout中调用相同的函数
- Ajax更新面板随机错误'PRM_MissingPanel'
- 如何检查if/else语句中的随机条件
- setTimeout() - 在具有随机延迟的 for 循环中
- 使用setTimeout函数&随机函数.以设置类元素的动画
- 在MVC3中更新局部视图的SetTimeout是随机执行的