Web teknolojileri ile ilgili teknik bir blog…

X-Requested-With ile AJAX’ı anlamak

Ufak bir ipucu paylaşayım istedim.

Eğer DRY prensibini benimsediyseniz mutlaka karşınıza gelmiştir: aynı sayfayı Ajax’la ve Ajax’sız çağırma ihtiyacı…

Bu durumda genelde senaryo şudur, AJAX’la çağırdığınızda sayfanın başında sonunda yer alan “header” ve “footer” kısmını göstermek istemezsiniz.

Ya da bir POST işlemi yapıyorsanız (insert / update / delete işlemleri) AJAX’la geldiğinde bir mesajı yazdırmak yeterli olurken AJAX’la gelinmediğinde işlem sonucunun gösterildiği bir sayfaya yönlendirmek gerekir. Krolar aynı sayfaya post edebilir ama ona değinmiyorum bile…

Daha advanced programcılar çıktı formatını değiştirebilir, örneğin AJAX’la gelindiğinde JSON, gelinmediğinde string gönderebilir mesela.

Bu durumla baş etmek için bir GET parametresi göndermek en klasik çözüm. Ancak her AJAX ihtiyacında tekrar bu GET parametresini göndermek hem angarya hem de boşu boşuna URL’yi uzatıyor.

Çözüm

Eğer javascript framework’ü kullanıyorsanız popüler framework’lerin hemen hepsi Ajax’la data gönderirken X-Requested-With diye bir header da gönderiyor. Bu header’ı kontrol ederek işlerinizi kolaylaştırabilir, kendi framework’ünüz varsa standardize edebilirsiniz.

Not: Javascript framework’ü kullanmıyorsanız da kullanmaya başlayın bi zahmet! Yok illa kullanmam diyosanız da XMLHttpRequest objesinin setRequestHeader diye bir metodu var, onu kullanarak javascript kütüphanenize ekleyebilirsiniz.

PHP’den kontrol etmek için $_SERVER['HTTP_X_REQUESTED_WITH'] değişkeni XMLHttpRequest değerine eşit mi diye bakmak gerekiyor.

  • GET parametresinden daha mantıklı olduğu kesin. Aslında AJAX ile haşır neşir olan controller’ı ayırmak daha mantıklı değil mi. Facebook’u incelediğimde (tüm sistem neredeyse AJAX üzerinde kurulu) ajax-controller.php adında bir dosya ile karşılaştım. Ve bazı ajax istemlerinin hep bu dosya üzerinden yürüdüğünü gördüm. FB’nin yolundan mı gitsek acaba?

Bu yazıya gelen cevapları takip etmek için bu RSS 2.0 linkini kullanabilirsiniz.

Gebze Evden Eve Nakliyat