通过Ajax刷新表列

时间:2009-06-05 08:55:26

标签: html ajax struts2

我有一个网页,其中包含我系统上运行的作业表。当这些工作完成或改变状态时,表需要反映变化。

目前我每隔8秒通过AJAX刷新整个表。这适用于一定数量的作业,但会导致非常高(~100)作业负载的性能问题,最终导致浏览器锁定。

我正在使用struts2的sx:div来执行这些更新,并且我相信它每次都会解析返回的表来搜索小部件,从而关闭此功能。

我认为刷新状态列会对此有很大帮助,因为返回的数据会小得多,但我不确定这是如何工作的。

我愿意使用除struts标签之外的其他东西来执行此操作。所以本质上我要问的是有一种简单的方法来刷新表的一列。

提前致谢。

3 个答案:

答案 0 :(得分:2)

仅更新状态列中的文本应该比重新呈现整个表更好地执行。从带宽节省可能不是那么大的胜利。但这只是我的直觉 - 你当然应该检查并衡量哪种方法最适合你。

如果每次更新中只有某些行的状态发生变化,那么仅更新已更改的行也应该可以提高性能。

此外,正如m_oLogin建议的那样,您可以考虑仅发送更改的增量。虽然根据我的经验,这不是最容易做到的事情,所以我不会从那里开始。

答案 1 :(得分:1)

如果每列都有一个类(col-1col-2等)。您的Ajax调用只能查询该行,并将新文本作为分隔字符串输出。

如果你正在使用jQuery.ajax,你可以提供success回调函数,代码首先拆分你的字符串。然后使用$('.col-X').each()循环遍历列的每个元素,以便更新其innerhtml

$.ajax({
    url: "YOUR_URL.php",
    success: function (data) {
        var return = data.split(',');
        $('.col-1').each(function (index) {
            $(this).html(return[index]);
        });
    }
)};

答案 2 :(得分:0)

当你说“我每隔8秒刷新整个表格”时,你的意思是你每隔8秒检索一次整个json数据吗?因为如果是这样的话,减速是正常的......

我会跟踪服务器端的更改,并在查询进入时发送一个小的“相同表”消息,而没有数据发生更改。如果服务器端发生了某些变化,则仅发回表数据。