我有一個js更改事件,它在用戶離開控件時通過Ajax請求保存數據。這工作正常,除非用戶決定離開頁面。 Ajax然後沒有完成,數據也沒有保存。看我Ajax request with JQuery on page unload我看到,如果我使請求同步Ajax請求將完成。我試過這個,它確實有效。但是,每當用戶從控件移動到頁面上的控件時,我都會調用此更改事件,並且我不希望所有這些調用都是同步的。在離開頁面之前獲取Ajax請求完成
我試着用Alert for unsaved changes in form來檢查未保存的數據。當存在未保存數據的控件時,這會觸發beforeunload
函數正常工作,但是我無法確定beforeunload
函數中要放置什麼。
- 我可以提醒一下。當用戶取消警報時,我的更改代碼將運行並且一切正常。然而,當用戶保存正常的數據而不需要做任何事情時,彈出一個對話框令人討厭和困惑
- 我試圖Using jQuery to test if an input has focus找到有焦點的元素,然後強制我的更改函數運行這個。然而,我找不到有焦點的元素(可能在這裏做錯了什麼?)
- 我試過使用睡眠功能給Ajax調用時間運行,但沒有工作
- 我試過將焦點設置到另一個控件 - 沒有運氣
任何關於我可能會嘗試什麼或者我可能會做什麼錯誤的想法我試過的任何事情?我能以某種方式發出無形警報,並且在用戶不必做任何事情的情況下觸發並取消警報?
由於很好的理由,沒有可靠的方法來做到這一點:如果一個Ajax請求可能導致瀏覽器在離開頁面之前等待,那麼一個聰明的網站可能無法無限期地離開該頁面的時間。這可能,也會被不良演員濫用。 Izzey的建議很好。設計你的應用程序的假設是用戶可以在任何時候離開,或者他們的互聯網連接可能會丟失。閱讀[Offline First!](http://offlinefirst.org/)以獲取更多最佳實踐。 – 2014-10-06 19:04:22