在 BeforeUnload 時執行 AJAX 函數
開發聊天應用程式時,優雅地處理使用者斷開連線至關重要。一種方法是在使用者關閉頁面時執行 AJAX 函數來刪除對應的資料庫條目。
在提供的程式碼中,當使用者關閉頁面時會觸發 onbeforeunload 事件,並且 closeSession() 函數被執行。此函數嘗試向 chat.php 發送 AJAX 請求以執行 SQL DELETE 語句並從隊伍清單中刪除使用者條目。但是,請求設定為非同步(jQuery 的預設設定),導致瀏覽器不等待請求完成就繼續卸載。
要解決此問題,應將 AJAX 設定中的非同步選項設為錯誤的。這會強制瀏覽器在卸載之前等待請求完成。但是,需要注意的是,依賴這種方法在不同的瀏覽器和版本中可能並不總是可靠。
以下是async 設定為false 的修改後的程式碼:
<code class="js">window.onbeforeunload = closeSession; function closeSession() { $.ajax({ url: "/chat/process/chat.php", type: "GET", async: false, }); return "disconnected"; }</code>
透過設定async設定為false 時,瀏覽器將暫停卸載過程,直接暫停到AJAX 要求完成,確保在斷開連線時刪除使用者的資料庫條目。
以上是如何在BeforeUnload上可靠地執行AJAX函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!