16

私はチャットに取り組んでおり、ユーザーがページを離れたかどうかを検出する方法を見つけようとしています。フロントエンドが混乱するのを避けるために、ほとんどすべてがデータベースによって処理されます。

だから私がやろうとしているのは、何らかの理由でページが離れると(ウィンドウが閉じられた、別のページに移動した、リンクをクリックしたなど)、人が離れる前に ajax 呼び出しが発生するため、データベースを更新できます。

これは私が試したことです:

$(window).unload(function(){
      $.post("script.php",{key_leave:"289583002"});
});

何らかの奇妙な理由で動作しませんでした。php コードを確認したところ、正常に動作しました。助言がありますか?

4

4 に答える 4

37

これを試して:

$(window).unload(function(){
    $.ajax({
        type: 'POST',
        url: 'script.php',
        async:false,
        data: {key_leave:"289583002"}
    });
});

に注意してくださいasync:false。そうすれば、ブラウザはリクエストが終了するのを待ちます。

の使用$.postは非同期であるため、ブラウザーがスクリプトの実行を停止する前に、要求が十分に速くない場合があります。

于 2012-04-22T22:23:07.717 に答える
3

これは正しい方法ではありません...OSがハングするか、ブラウザプロセスで何かが発生した場合、このイベントは発生しません。また、ユーザーがいつ離れたのかを知ることはできず、ユーザーが切断した後もオンラインで表示されます。これの代わりに、あなたができることはです。

  1. ソケットが切断されたときにユーザーが切断されたことを確認できるように、ソケットを接続してみてください
  2. サーバーにリクエストを送信して(たとえば1秒ごとに)、ユーザーがまだ接続していることを確認できます。2秒経過してもリクエストを受信しなかった場合は、ユーザーを切断します。
于 2012-04-22T22:24:46.783 に答える
1

$.post の後に popup (prompt("leaving so Early?")) を追加してみてください。それはうまくいくかもしれません。ユーザーエクスペリエンスが悪い可能性があります。:)

于 2012-04-22T22:13:55.043 に答える
-1

これは上記の回答に関連しています。https://stackoverflow.com/a/10272651/1306144

これにより、1秒ごとにajax呼び出しが実行されます。(1000)

function callEveryOneSec() {
    $jx.ajax({}); // your ajax call
}

setInterval(callEveryOneSec, 1000);
于 2016-06-12T15:19:57.450 に答える