2011-06-24 94 views
2

我有一個表(它表示一個項目隊列),其行可以使用jQuery可排序插件重新排序。用戶可以對其隊列重新排序,並將更新後的訂單保存到服務器上。如何保持服務器和瀏覽器之間的隊列同步?

我面臨的挑戰是服務器週期性地從隊列頂部拉出一個項目,處理它,然後將其移動到隊列底部。發生這種情況時,用戶在瀏覽器上看到的順序已經過時,當他們嘗試重新排序時,索引會全部搞亂。

我已經想出了一些解決方案來解決這個問題,但我不太清楚從可用性的角度來看,什麼樣的交互會有意義。我已經考慮檢測用戶界面上的拖動事件並首先檢查服務器上的更新,但是如果我刷新頁面,則用戶在中間的拖動將被中斷。

我知道服務器何時更新隊列,因此我考慮輪詢此信息,然後在更新發生前幾秒鎖定拖動功能,然後更新順序並解鎖拖動功能。

我很好奇,如果有人已經解決了類似的問題。任何想法或指導將不勝感激。

回答

1

這個問題的常用方法是週期性地(大約10秒左右)使用Ajax部分刷新頁面。如果發生客戶端狀態已過時,則應通知用戶並恢復客戶端狀態以與服務器同步。恢復可以通過多種方式實現:最簡單的方法就是拒絕客戶端的更改並更新服務器的狀態。更難的是嘗試將客戶端狀態與服務器進行合併,這樣更加實用。

+0

好主意。我想我會走這個方向。我會定期輪詢以使用ajax調用更新表格順序,然後檢查客戶端狀態是否與服務器在完成拖動重新排序時不同步。如果它們不同步,我將顯示一條警告,聲明訂單在服務器上發生了更改,因爲它們已經重新排序,然後我將拋棄它們的更改並重新同步瀏覽器以匹配服務器順序。謝謝! –

1

定期分頁是要走的路,但我想補充說,如果沒有改變,你可能不想在表上做更新。也許在記錄上保存一個「上次更新」的字段,並檢查是否有最後一次更新>最後一頁嘗試是一個解決方案。

相關問題