Bir PHP uygulamasına gelen GET, POST gibi talepler eğer Javascript üzerinden geliyorsa bunu anlamak bazı durumlarda işimizi kolaylaştırmaktadır. GET taleplerini karşılamakta bir sorun yaşamayız fakat POST taleplerinde Javscript ile giden Header bilgisinde $_POST[‘name’] şeklinde query string değerini alamayabiliyoruz.
O halde duruma göre işlem yapabilmek için önce talebin Javascript yani XMLHttpRequest olup olmadığını anlamalıyız. Bunun için örnek bir sınıf yazarak durumu anlamaya çalışalım. Örnek bir app.php dosyasının içeriğini aşağıdaki şekilde belirleyelim.
class Request{ public static function IsAjaxRequest(){ return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest' ; } } if(Request::IsAjaxRequest()) echo("Ajax"); else echo("Not");
Bu PHP uygulamasını internet tarayıcımızdan direkt olarak çağırdığımızda ekrana “Not” şeklinde çıktı verecektir. Eğer bir Javascript uygulamasından talep gönderecek olursak “Ajax” şeklinde sonuç alırız.
$.ajax({ url:"app.php", type: "GET", success: function(data){ console.log(data); } })
Çalışan uygulama
http://www.bayramucuncu.com/ornek/app.php
http://www.bayramucuncu.com/ornek/app.html
DİKKAT: Eğer IIS üzerinden PHP uygulaması çalıştırıyorsanız bu yöntem çalışmayacaktır. Windows ortamında IIS üzerinden PHP 5.3 ile yaptığım denemede bunu fark ettim. Bunun sebebi $_SERVER içindeki değişkenlerin PHP tarafından değil HTTP sunucusu tarafından oluşturulmasıdır. IIS HTTP sunucusu HTTP_X_REQUESTED_WITH başlığını oluşturmadığından IIS üzerinde çalışmaz. Apache HTTP sunucusu HTTP_X_REQUESTED_WITH değerini oluşturmaktadır.