我正在创建一个模拟证券交易所市场的项目.我在一个大的html上向用户公开股票数据,<table>其中每<tr>行有两个<td>单元格.其中一个是公司的象征(即AAPL),另一个是当前的市场价值(不可能更简单).
我现在做的是我使用这样的javascript函数:
<script type="text/javascript">
$(function(){
setInterval(loadTable, 10000)
});
function loadTable(){
$("#se_table").load("/load/table/?ajax&user={{user.username}}");
}
</script>
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?只更改一个值时,我应该加载整个表吗?
Her*_*aaf 10
首先,如果有人忙于对表做某事,例如突出显示文本,当它突然重新呈现时,这可能会导致糟糕的用户体验.如果必须重新加载所有数据,至少只更新已更改的行.您可以使用javascript内置表操作或任意数量的jQuery插件来实现此目的.
其次,如果它在计算上是合理的,那么如果您可以计算哪些行发生了变化,那么在数据传输和用户体验方面会更有效,并且只发送这些行.为表id中的每一行分配全局唯一,因此您可以使用jQuery轻松更新该行.使用这种技术,还可以轻松添加特定行已更新的某些视觉提示,例如轻微的颜色更改,这通常很好(如果适用).
我最喜欢做这种事情的方式(没有Comet)如下:
trigger方法发送另一个ajax请求,这次期望一个自该datetime以来已经改变的行列表.更新
根据您的评论,我只需添加一些额外的注释.
text函数或其中一个jQuery表插件来更新行.如果你是新手,这是相当满口的和大量的谷歌搜索,但这是一个很好,干净的方式.
广泛使用数据属性.在初始GET页面请求期间,让包含值的列看起来像:
<td data-for-symbol="GOOG">+256.00</td>
Run Code Online (Sandbox Code Playgroud)
已经/load/table/?ajax&user={{user.username}}返回与包含自上次用户获取的表更新对象的JSON响应,然后单独应用它们:
$('td[data-for-symbol=' + obj.symbol + ']').text(obj.value);
Run Code Online (Sandbox Code Playgroud)
不能比那更清洁.
| 归档时间: |
|
| 查看次数: |
7112 次 |
| 最近记录: |