【发布时间】:2017-09-23 07:21:53
【问题描述】:
我想在我的页面中创建一种机制,以便它使用 Ajax 每秒刷新一次表数据。我该怎么做?
【问题讨论】:
-
??只需使用 setInterval 并将您的逻辑放在那里。
标签: ajax asp.net-mvc-3
我想在我的页面中创建一种机制,以便它使用 Ajax 每秒刷新一次表数据。我该怎么做?
【问题讨论】:
标签: ajax asp.net-mvc-3
假设您有一个控制器操作,它将把表格作为部分视图返回,您可以使用:
<script type="text/javascript">
$(function() {
setInterval(loadTable,1000); // invoke load every second
loadTable(); // load on initial page loaded
});
function loadTable() {
$('#tablecontainer').load( '/controller/tabledata' );
}
</script>
<div id="tablecontainer">
</div>
您的 tabledata 操作会返回包含该表的部分视图。
<table>
<thead>...</thead>
<tbody>...</tbody>
</table>
EDIT 通过点击处理程序建立(脚本标签省略)
$(function() {
var timer;
$('#enableCheckbox').change( function() {
if ($(this).find(':checked').length) {
timer = setInterval(loadTable,1000); // set up timer
loadTable();
}
else if (timer) { // stop the interval timer
clearInterval(timer);
timer = null;
}
});
});
function loadTable() {
$('#tablecontainer').load( '/controller/tabledata #innercontainer' );
}
完整视图(至少包含以下内容)
<div id="tablecontainer">
<div id="innercontainer">
<table>
<thead>...</thead>
<tbody>...</tbody>
</table>
</div>
</div>
【讨论】:
setTimeout(loadTable, 1000);。这样,如果某些 Ajax 请求需要更长的时间,浏览器就不会爆炸:P
codeloadTable() { $('#tablecontainer').load( '/task2/index' ); },而我只想刷新#tablecontainer div
$('#tablecontainer').load('/task2/index #tablecontainer'); 在 url 中添加一个过滤器,但更好的是重构您的操作/视图以使操作仅返回部分或可能让操作注意请求的来源 (Request.IsAjaxRequest()) 并返回带有表格的部分视图。