ホームページ >バックエンド開発 >PHPチュートリアル >BeforeUnload で AJAX 関数を確実に実行するにはどうすればよいですか?

BeforeUnload で AJAX 関数を確実に実行するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-02 19:28:03789ブラウズ

How to Reliably Execute AJAX Functions on BeforeUnload?

BeforeUnload での AJAX 関数の実行

チャット アプリケーションを開発する場合、ユーザーの切断を適切に処理することが重要です。 1 つの方法は、ユーザーがページを閉じるときに AJAX 関数を実行して、対応するデータベース エントリを削除することです。

提供されたコードでは、ユーザーがページを閉じると onbeforeunload イベントがトリガーされ、closeSession() 関数がトリガーされます。が実行されます。この関数は、AJAX リクエストを chat.php に送信して SQL DELETE ステートメントを実行し、キュー テーブルからユーザーのエントリを削除しようとします。ただし、リクエストは非同期 (jQuery のデフォルト) に設定されているため、ブラウザはリクエストの完了を待たずにアンロードを続行します。

これを解決するには、AJAX 設定の async オプションを次のように設定する必要があります。間違い。これにより、ブラウザはアンロードする前にリクエストが完了するまで待機する必要があります。ただし、このアプローチに依存すると、ブラウザーやバージョンが異なると必ずしも信頼できるわけではないことに注意することが重要です。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。