2013-04-10 5 views
17

ユーザーがウィンドウ/タブを閉じるかリンクをクリックして移動すると、PHPページ上に数行のコードを含むJavaScript/jQuery関数を呼び出す必要があります。私はonbeforeunload関数を試しましたが、return "blah blah blah;"部分だけが実行され、他はすべて無視されます。私はまた、.unloadメソッドをjQueryから試しましたが、何らかの理由でこのコードが実行されません。ユーザーがナビゲートしたときにイベントをトリガーする

$(window).unload(function() { 
    alert('blah blah blah'); 
}); 

代替候補をご提案ください。ありがとう..

+1

アンロード時に何をしますか? – writeToBhuwan

+1

セッション変数を設定解除するには、PHPにAjaxを呼び出す必要があります。 –

+0

'リンクをクリックして移動する'これはあなたの文書にアンロードをバインドする必要があることを示しています – muneebShabbir

答えて

13

ここには簡単な実例があります。 unloadコールバックのreturnがブラウザのポップアップ確認に表示されます。 jQueryので

window.onbeforeunload = function(event) { 
    // do stuff here 
    return "you have unsaved changes. Are you sure you want to navigate away?"; 
}; 

$(window).on("beforeunload", function() { 
    $.ajax("someURL", { 
     async: false, 
     data: "test", 
     success: function(event) { 
      console.log("Ajax request executed"); 
     } 
    }); 
    return "This is a jQuery version"; 
}); 

のネットワークタブに見てAjaxリクエストを送信する例を作業する

は前 http://jsfiddle.net/alexflav23/hujQs/7/

これを行う最も簡単な方法をアンロードブラウザ。あなたは、あなたが望むようにリクエストがどのように送信されているかを見ることができます。適切なデータを送信するだけです。

トリガされるすべての操作は同期的でなければならないことに注意してください。たとえば、同期Ajaxリクエストのみをインスタンス化することができます。しかし、上記はすべての目的のために完全に信頼できるものではありません。

ユーザーデータの定期的なバックアップをlocalStorageに自動的に選択し、サーバーと自動的に同期します。 window.onbeforeunloadを追加の予防措置としてください。ただし、主な仕組みとしては使用しないでください。問題を引き起こすことはよく知られています。

+0

これは動作しません。 beforeunloadは、ユーザーが警告を確認したかどうかにかかわらず、常に呼び出されます。私はいくつかのクリーンアップを実行する必要がありますが、私は実際には、ユーザーが実際に離れて移動する場合クリーンアップを実行したい。どうやってやるの? –

+0

@JohnHenckelそれを行う方法はありません。 – apscience

+1

@apscience、ありがとう。これはブラウザの仕様に欠陥があるようです。たとえば、データベースの行を編集するためのWebページを作成したいと思います。他のユーザーが行を変更できないように行をロックしたいとします。私が見つけた唯一の解決策は、数秒ごとにサーバーにハートビートを送信することで、サーバーはUNLOCKをいつ開始するかを知ることができます。しかし、これは深刻な欠陥があります。なぜなら、ユーザーがまだ編集中であっても、「確認」ボックスが開いている間はJSエンジンが一時停止しているため、ハートビートが停止するからです。たぶんいつかブラウザがOSに取って代わりられるだろうが、今のところそれはアプリケーションプラットフォームとしてうんざりだ! –

関連する問題