【问题标题】:How can I refresh my page every second using Ajax in MVC?如何在 MVC 中使用 Ajax 每秒刷新我的页面?
【发布时间】:2017-09-23 07:21:53
【问题描述】:

我想在我的页面中创建一种机制,以便它使用 Ajax 每秒刷新一次表数据。我该怎么做?

【问题讨论】:

标签: ajax asp.net-mvc-3


【解决方案1】:

假设您有一个控制器操作,它将把表格作为部分视图返回,您可以使用:

<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>

【讨论】:

  • 最好使用 Ajax 响应回调,然后(在回调内部)设置一个新的 setTimeout(loadTable, 1000);。这样,如果某些 Ajax 请求需要更长的时间,浏览器就不会爆炸:P
  • 嗨,谢谢你的代码,但这里的问题是我的整个视图每秒都在刷新,因为函数 codeloadTable() { $('#tablecontainer').load( '/task2/index' ); },而我只想刷新#tablecontainer div
  • @Cal - 您可以使用哈希 $('#tablecontainer').load('/task2/index #tablecontainer'); 在 url 中添加一个过滤器,但更好的是重构您的操作/视图以使操作仅返回部分或可能让操作注意请求的来源 (Request.IsAjaxRequest()) 并返回带有表格的部分视图。
  • @Šime - 我可能不会要求客户端每秒更新一次。如果需求不是严格的,使用回调来安排下一个任务是可以的,因为它会倾向于漂移(即它会比一秒稍长,并且会根据响应的及时性而变化)。如果您在 Intranet 上 - 这是我可以想象每秒一次是合理的唯一地方,请求只需要几毫秒,并且您真的希望它每秒像时钟一样滴答,那么 setInterval 是要走的路。不过,使用小于 1 秒的超时会很好。
  • 您好,该代码有效。我知道这要求太多,但只是好奇。如果我只想在单击某个复选框时才执行该代码怎么办?
猜你喜欢
  • 2011-12-06
  • 2016-03-30
  • 2015-07-20
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多