ページ離脱などの際にデータ保存する時間をウェイトさせる方法

2014年11月13日

Javascript

仕事で苦労したトコロを備忘録しておきます。 「window.beforeunload」などのイベントの際にajaxで離脱イベントログをサーバーにsendするような時、 ブラウザはページが切り替わったら、サーバーセッションも瞬時に切ってしまう事は、容易に想像できる。 でも、これはブラウザ毎に挙動が違っていて、ちゃんとajaxでもセッション完了を待ってくれるブラウザもあれば、強制的にちょんぎられる場合もある。 ただ、待ってくれる保証がない以上、これは、システム側で確実にサーバーにデータを送る必要があるので、その時の対応。

指定時間分waitさせる関数

//ログ書き込みの為のウェイト値 function sleep(sleep_time){ var current = new Date(); var end_point = new Date(); for(var i=0;current.getTime()-end_point.getTime()<sleep_time;i++){ current = new Date(); } };

実行処理

sleep(500); これで500ミリ秒間、ブラウザをキープしてくれる。 きれいにセッションが切れた事を判定するには、ajax側でレスを返してそれを判定するという方法もあるが、この方法で、計測誤差もそんなに出ていないことを考えると、さほど悪くないと思われる。 いかがだろうか?