Wordpress'in admin panelinde bir yazı düzenlerken browserdan çıkış yaptığınızda "Bu sayfadan ayrılırsanız yapmış olduğunuz değişiklikler kaybolacaktır. Bu sayfadan ayrılmak istediğinize emin misiniz?" şeklinde uyarı ile karşılaşırsınız ve sizden çıkış yapmak istediği. Yine aynı şekilde gmail ile yeni e-posta oluştururken e-posta'yı göndermeden pencereyi kapatırsanız benzer uyarı alırsınız. Bu uyarıyı verdiren jquery kodu:

jQuery(function(){
    jQuery(window).bind('beforeunload', function () {
	return 'Bu sayfadan ayrılırsanız yapmış olduğunuz değişiklikler kaybolacaktır.';
    });
});

Örnek 1 Görüntüle

Kodu bu şekilde sayfaya eklediğinizde kullanıcı formu submit ettiğinde yine aynı uyarıyı alacaktır. Bunun önüne geçmek için formun submit anında "beforeunload" olayını iptal edeceğiz. Şöyleki:

jQuery(function(){
    jQuery('#form-id').submit(function(){
	jQuery(window).unbind('beforeunload');
    });
});

Örnek 2 Görüntüle

Bu yöntemle sistemden çıkış yapmadan browser penceresini kapatarak çıkan kullanıcının durumunu güncelleyebiliriz. Örneğin online kullanıcı listesi yaptınız ve bu listede giriş yapmış olan kullanıcılarınızı listeliyorsunuz. Kullanıcı çıkış linkine bastığınızda siz veritabanından durumunu çıkış yapmış olarak güncellersiniz ve online kullanıcı listesinden bu kullanıcı düşer. Fakat kullanıcı browser'dan çıkış yaptığında bu şansa sahip değilsiniz. Göstermiş olduğum yöntem ile kullanıcı browserdan çıkış yaptığında ajax ile durumunu güncellersiniz.

Benim bu yöntemi nerede kullandığımdan bahsetmek istiyorum. Bir form ekranım var ve bu form ekranımda bir kaydı aynı anda en fazla bir kişinin güncellemek için açabilmesini istiyorum. Siz bunu wordpress'deki yazı ekleme ekranı olarak düşünün. Veritabanında gidip "güncelleniyor" adında bir alan açtım ve bu alan değeri "1" olduğunda o yazıyı güncellemek üzere başka bir kullanıcının açtığını anlıyorum, "0" olduğunda ise o yazıyı güncellemek için açan başka bir kullanıcı olmadığını göstermektedir kullanıcı yazıyı güncellemek için açtığında yazının veritabanındaki "güncelleniyor" bilgisini "1" yapıyorum.  Kullanıcı güncelleme ekranında kaydet butonuna veya vazgeç butonuna bastığında kullanıcının yazıyla işini tamamladığından dolayı server tarafında o yazının veritabanındaki "güncelleniyor" bilgisini "0" yapıyorum. Fakat kullanıcı kaydet veya vazgeç butonuna basmadan direkt browserdan çıktığında yazının "güncelleniyor" bilgisini nasıl değiştireceğim ? İşte bunun için bahsettiğim yöntemi kullacağız.

var sayac = 0;
jQuery(function(){
    jQuery(window).bind('beforeunload', function () {
	if (sayac == 0) {
	    $.ajax({
                async: false,
		url: 'yazi_durum_guncelle.php?yazi_id=10'
	    });
	}
	sayac++;
    });
});

Pencere kapatıldığında ajax istek yapıp yazının durumunu güncelliyoruz. Burada dikkat etmemiz gereken "async:false" değeridir. Çünkü bunu yaptığımız zaman ajax isteğimizin asenkron çalışmasını sağlayarak ajax isteği bitene kadar pencerenin kapanmamasını sağlıyoruz ve böylece ajax isteğimizin sonlanmasını sağlıyoruz."async:false" eklemediğiniz zaman ajax isteği sonlanmadan pencere kapanır ve yazı durumu güncellenemez.

Test yaparken ajax isteğinin iki defa gerçekleştiğini farkettim, emin olmak için alert ile test edince iki defa alert aldım. Bundan dolayı sayac değişkeni tutarak ajax isteğinin bir defa gerçekleşmesini garanti altına aldım.

Ajax senkron ve asenkron çalışması hakkında buradan bilgi alabilirsiniz.

Son örnek, anlattığım yöntemi kullanabileceğiniz alana sadece bir örnekti. 

İyi çalışmalar.