這裏的情況:在編輯時實現鎖定和解鎖文檔
我有一個基於網絡的票務應用程序,多個用戶。
可能發生的一個問題(和確實發生在我要替換的舊版本中)是user1打開一張票,編輯它並保存它。但是當他編輯它時,user2也打開並保存了勾號。 user2所做的更改將被user1丟失/覆蓋。
爲了防止這一點,我實現了一個鎖定機制,這是相當簡單:
- 在開罰單的PHP腳本檢查現有的鎖。
- 如果沒有找到,則鎖定&打開文檔。
- 在JS中,
setTimeout()
和一個XmlHttpRequest調用在10分鐘後解鎖票證(無需工作)。 - 我還設置一個
unload
事件解鎖票收盤時/從窗口/標籤移開
問題坐落在步驟4:unload
事件(&它的朋友beforeunload
)只是沒有按」 (這個功能具有任何嚴肅的意義,它需要可靠),但許多瀏覽器並不總是在我想讓它被觸發的時候觸發它(像按下後退按鈕,點擊F5,關閉標籤等,這根據瀏覽器而變化)
我能想出的唯一選擇是使用setTimeout()
和XmlHttpRequest()
調用php腳本來告訴它頁面仍然打開。如果此「心跳」監視器失敗,我們假定用戶離開票證並解鎖文檔。
這對我來說似乎非常低效,並且很快就會導致很多用戶對服務器的請求。
任何人如何處理這個問題有更好的主意?它需要在IE8 +和其他現代瀏覽器(理想情況下,Firefox,Webkit,Opera)中工作。我不在乎IE6/IE7,我們的組織不使用這些)。
謝謝,我實現了這一點,它已經比卸載到目前爲止好得多。 – Carpetsmoker