如何在服务器和浏览器之间保持队列同步?

时间:2011-06-24 17:56:11

标签: jquery browser concurrency usability

我有一个表(表示项目队列),其行可以使用jQuery可排序插件重新排序。用户可以重新排序他们的队列,更新的订单可以保存到服务器。

我面临的挑战是服务器定期从队列顶部拉出一个项目,处理它,然后将其移动到队列的底部。发生这种情况时,用户在浏览器上看到的顺序已过时,当他们尝试重新排序时,索引会全部搞砸。

我已经提出了几个解决方案来解决这个问题,但我不确定从可用性的角度来看哪些交互是有意义的。我已经考虑过在UI上检测拖动事件并首先检查服务器上的更新,但是如果我刷新页面,那么用户在中间的拖动将被中断。

我知道服务器何时更新队列,所以我考虑轮询这些信息,然后在更新发生前几秒锁定拖动功能,然后更新订单并解锁拖动功能。

我很好奇是否有人以前解决了类似的问题。任何想法或指导都将不胜感激。

2 个答案:

答案 0 :(得分:1)

解决此问题的常用方法是定期(按照约10秒的顺序)使用Ajax部分刷新页面。如果发生客户端状态已过时,则应通知用户并恢复客户端状态以与服务器同步。可以通过多种方式实现恢复:最简单的方法是拒绝客户端的更改并使用服务器的状态进行更新。更难的是尝试将客户端状态与服务器进行合并,这样更有用。

答案 1 :(得分:1)

定期分页是可行的方法,但我想补充一点,如果没有任何变化,你可能不想对表进行更新。也许在您的记录中保存“上次更新”字段并检查是否上次更新>最后一页尝试是一种解决方案。