Geçen yazımızda AJAX kütüphanesi olarak büyük ihtimal dojo kullanacağımızı söylemiştik. Ama küçük ihtimallerden birini seçerek devam etmeyi daha uygun gördük. Prototype adlı kütüphaneden biraz bahsetmiştik. Bakalım fikrimiz neden değişmiş?
Prototype kütüphanesi aslen AJAX’a hizmet etmek anlayışı ile oluşturulmamış. Onu bir javascript kütüphanesi olarak adlandırmak çok daha doğru olur. Çünkü AJAX fonksiyonları onun sadece bir kısmını oluşturuyor. Yanlış anlaşılmasın, AJAX için öyle çok da fonksiyonu yok. Ama bazı çatıların (open rico, script.aculo.us) temelini oluşturduğu ve işin genel işleyişini pekiştirmemiz için diğerlerinden çok daha iyi bir başlangıç noktası. Bazı okurlarımızın geri dönüşleri de bu kararı vermemizdeki etkenlerden bir tanesi. Şimdi hem biraz prorotype kütüphanesinden bahsedelim hem de küçük bir örnekle devam edelim. Bu arada projenin internet adresi prototype.conio.net. En son sürümünü (şu anda 1.4.0) buradan indirebilirsiniz.
Bazı faydalı fonksiyonlar
Kodlama ile uğraştığımızda sürekli olarak tekrarlanan kısımlar yazılımcıyı sıkar. Prototype içerisinde bu rahatsızlığı çözen birkaç ön tanımlı fonksiyon bulunuyor.
$()
document.getElementById()
fonksiyonu için bir kısa yol diyebiliriz. Sayfa içerisinde id
özelliği eşleşen elemanı döndürür. Birden fazla id
verilerek eşleşen elemanlara ait bir dizi oluşturulabilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Kod içerisinde ne yapıldığının üzerinden kısaca geçelim. ilkBolum()
fonksiyonu sayfada id
özelliği bolum1
olan elemanı alıyor özelliğini ekrana uyarı olarak bastırıyor. butunBölümler()
fonksiyonu id
özellikleri bolum1
ve bolum2
olan elemanlardan bir dizi oluşturuyor ve bunları bir döngü içerisinde kullanarak aynı işi yapıyor. Bu fonksiyonların kullanımını tetikleyen de sayfadaki butonların tıklanması.
$A()
$A()
fonksiyonu gönderilen değeri diziye çevirir. Sahip olduğu çeşitli metodlar sayesinde dizi işlemlerinde işinizi kolaylaştırır. Sayfadaki elemanları dizi nesnelerine çevirip daha kolay işlemenizi sağlar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
$F()
Bu fonksiyon da bir önceki gibi kısa yol niteliğinde. ‘id’ özelliği eşleşen form elemanının değerini döndürür.
1 2 3 4 5 6 7 8 |
|
$H()
Nesneleri dizilere benzeyen sayılabilir kargaşa (hash) nesnelerine dönüştürür. Cümle biraz anlaşılmaz duruyor ama örneğe baktığınızda anlaşılır olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
$R()
new ObjectRange(altSınır, üstSınır, sınırlarHariç)
tarzı yazımın kısaltılmış hali diyebiliriz. Örnekteki kullanımda each()
metodu yine prototype kütüphanesindeki sayılabilir nesnesinden bir metottur.
1 2 3 4 5 6 7 8 9 10 11 |
|
Try.these()
Denediğiniz fonksiyonlardan biri çalışana kadar sırayla tümünü dener ve çalışan fonksiyonun değerini döndürür. Örneğin tarayıcılar arasındaki farklılık durumlarında veya farklı js sürümlerinde kullanışlı olabilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
AJAX nesnesi
Prototype kütüphanesinin buraya kadarki kısmı sadece işimizi kolaylaştırabilecek bazı fonksiyonlardan ibaretti. Halbuki bizim ilgi alanımız AJAX. O zaman kütüphanenin AJAX nesnesini mercek altına alabiliriz.
Prototype içerisinde AJAX mantığını işletebileceğiniz aynı isimli nesneye ait bir kısım sınıflar yer alıyor. Bunların nasıl kullanıldığına bir bakalım.
Ajax.Request
Request
sınıfı XMLHttpRequest
nesnesini oluşturma ve bağlantının başarılı olup olmadığını kontrol edip gelen cevabı işleme sürecini tarayıcı bağımsız olarak kontrol edebilmenizi sağlıyor.
Örneğin bir sayfa tasarlıyorsunuz ve sayfada yer alan bir seçim listesinde yapılan değişiklik sonucu farklı bir form elemanını güncellemek istiyorsunuz. Güncelleme için de dinamik bir sayfadan gelen cevabı kullanacaksınız. Şimdi bu senaryoyu uygulayacağımız örneği hayata geçirelim ve ardından konuya devam edelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
İstek gönderdiğimiz dinamik sayfa için PHP ile yazdığımız aşağıdaki kodları kullandık. Hangi dilin kullanıldığı vs. gibi şeyler şu anda konumuz dışı ve bunlar sadece birer örnek niteliğinde.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Gördüğünüz gibi listeden yapılan AJAX çatısı seçimi bize alttaki alanda adresini görüntülemekte. Bunun için öncelikli olarak $F('AJAXCati')
ile seçimin değerini aldık. Daha sonra isteğimizi göndereceğimiz adresi tanımladık. Ardından göndereceğimiz değiştirgeni (Birden fazla olabilir. Bu durumda “+ ‘°istirgen2=’ + deger2″
şeklinde devam edecektik.) belirledik. Ajax.Request
nesnemizden bir tane ajaxla değişkenine kopyaladık ve gerekli değiştirgenleri de aynı anda tanımladık. Talebi dinamik sayfaya iletmek için GET
metodunu kullandık. Cevabın döndüğünden emin olmamızı sağlayan onComplete
değiştirgeni için de cevapGoster()
fonksiyonunu çağırılacak fonksiyon olarak belirledik. Bu fonksiyon içerisinde de gelen cevabı id
özelliği sonuc
olan kutunun değeri yapan satırı yazdık.
Request
nesnesi içerisinde tanımlanabilecek bir iki özellik daha bulunuyor. Örneğin işlemin eş zamanlı olup olmayacağının belirlendiği asynchronous
gibi (Değer olarak true
veya false
alabilir. Varsayılan değer true
).
Bu yazı Ağustos 2006 tarihinde PC Tech dergisinde yayınlanmıştır.