Ajaxların bir siteyi nasıl karıştırabileceğini bilirsiniz. OOP ya da prosedürel programlamaya göre bakımı çok daha zor bir koddur ajax eğer biraz dikkatli yazılmamışsa.
En basit ajax tipi:
Sayfanın içerisinde bir button yaparsınız ve onclick olayına yap(x,y,z); gibi bir javascript koyarsınız.
yap() adlı fonksiyon ajax kullanan bir fonksiyon olsun.
function yap(x, y, z)
{
var req = newXMLHttpRequest();
var callbackHandler = StateHandler(req, updateBrowser, "newSelect", 1);
req.onreadystatechange = callbackHandler;
req.open("POST", "/dosomething.php", true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send("x="+x+"&y="+y+"&z="+z);
}
Birinci önerim:
dosomething.php kendi başına bir sayfa olmasın. Aynen diğer sayfalarda olduğu gibi modüler bir sayfa olsun. Çünkü aynen diğer sayfalarda olduğu gibi ajax sayfalarında da modülerite çok önemlidir. Bir güvenlik önlemi eklediğinizde sitedeki tüm ajaxları arayıp bulmak kesinlikle inanılmaz bir zaman kaybı olacaktır.
İkinci önerim:
Bu sayfaları websitenizin içerisindeki klasörler içerisinde kaybetmeyin. Ajax için ayrı bir folder açıp tüm sayfaları orada ya da oranın altındaki klasörlerde tutun. Ve mümkünse bunların hepsi anasayfadaki index aracılığı ile çalışan tek başına çalışmayan sayfalar olsun.
if(!defined("BLOCK"))
{
die(unAuthorizedAction());
}
kullanın. Dikkatsizce yerleştirilen Ajaxların sitenizde ne gibi güvenlik açıklarına neden olduğunu biraz düşünseniz rahatlıkla kavrarsınız.
Gelelim ikinci kısma
function newXMLHttpRequest() {
var xmlreq = false;
if (window.XMLHttpRequest) {
xmlreq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
}
}
}
return xmlreq;
}
Bu fonksiyon objemizi oluşturuyor. İsterseniz durumlara ait ufak debug kodları ya da hata loglamaları yapabilirsiniz ama size kalmış.
function StateHandler(req, responseXmlHandler, upDiv, noloading)
{
return function ()
{
if (req.readyState == 4)
{
if (req.status == 200)
{
responseXmlHandler(req.responseText, upDiv);
}
else
{
//document.getElementById(upDiv).innerHTML = "ERROR: "+ req.status;
}
}
else
{
if(!noloading)
document.getElementById(upDiv).innerHTML = "< i mg src='/images/loading.gif'>";
}
}
}
Bu da ünlü yükleniyor resmini sayfanıza yerleştiren yer.
Ve en son da sayfanızı güncelleyen, karşıdan (ajax tarafından çağrılan sayfadan dönen verinin işlendiği yer.)
function updateBrowser(testXML, upDiv)
{
var updateDiv = document.getElementById(upDiv);
var hiddendiv = document.getElementById("hiddendiv");
updateDiv.innerHTML =testXML;
}
Yukarıdaki kodda gelen verinin aynen sayfaya verildiğini görüyorsunuz. Oldukça kolaycı bir yöntemdir. Php sayfasında her türlü işlemi düşünüp hesaplayıp kullanıcıya sadece html çıktısını gönderirsiniz. Oldukça işe yarayan bir yöntem ama birçok yerde yeterli olmaz. Sayfanın birçok farklı yerlerinde değişiklik yapacaksanız bunun yerine sayfadan xml döndürmeli ve bu fonksiyonda sonuçları değerlendirip sayfanın ayrı ayrı noktalarını update etmelisiniz.
Bu iş böyle yapılır klavuzu değil belki ama php ile ajax yazarken dikkat etmeniz gerekebilecek bazı konuları buraya yazdım. Daha az baş ağrısı için bu şekilde çalışmak iyi olacaktır.
Kaçınmanız gereken konulardan biri de mümkün olduğunca ajala gelen sayfanın içine çok fazla javascript gömmemek. Aslında teknik olarak bir sorun değil ama yine de sayfanızın kodu o kadar karmaşık ve takip edilemez bir hal alır ki(özellikle de karşı tarafta ajaxla çağrılan sayfalarda iyi bir modüler yapı kurmadıysanız, makineler tıkır tıkır çalışmıyorsa) kafayı yiyebilirsiniz. Henüz ben rastlamadım ama bazı projelerde bu duruma birbir şahit oldum.
İyi çalışmalar beyler bayanlar ;)