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.
'96 dan beri web teknolojileri üzerine çalışır.
sakirsensoy
9 Sep, 2011
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?