<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Erhan is typing... &#187; AJAX</title>
	<atom:link href="http://erhanabay.com/category/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://erhanabay.com</link>
	<description>WebDevelopment , PHP, Javascript, CakePHP, ExtJS</description>
	<lastBuildDate>Sat, 23 Jan 2010 15:15:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>script.aculo.us Efektleri</title>
		<link>http://erhanabay.com/2007/05/17/scriptaculous-efektleri/</link>
		<comments>http://erhanabay.com/2007/05/17/scriptaculous-efektleri/#comments</comments>
		<pubDate>Thu, 17 May 2007 21:41:25 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/05/17/scriptaculous-efektleri/</guid>
		<description><![CDATA[Geçen yazımızda başladığımız script.aculo.us serüvenine bıraktığımız yerden devam ediyoruz. Bu hafta kütüphanenin efektler bölümünü ele alacağız ve temel efektlerden birer örnek yapmaya çalışacağız. script.aculo.us kütüphanesinin efektleri, sürükle-bırak, sıralama, otomatik tamamlama gibi işlerinizi kolaylaştıracak kontrolleri ve DOM öğelerini üretebilen özellikleri barındırdığından bahsetmiştik. Bu ay efekt kullanımına değineceğiz. Geçen ayki yazıya ulaşamayanlar pctech.com.tr adresini ziyaret edebilirler. Geçen [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://erhanabay.com/wp-content/uploads/2007/05/scriptaculous_logo.png" title="scriptaculous_logo.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/scriptaculous_logo.thumbnail.png" title="scriptaculous_logo.png" alt="scriptaculous_logo.png" align="right" border="0" /></a><a href="/2007/05/17/scriptaculous/">Geçen yazımızda</a> başladığımız script.aculo.us serüvenine bıraktığımız yerden devam ediyoruz. Bu hafta kütüphanenin efektler bölümünü ele alacağız ve temel efektlerden birer örnek yapmaya çalışacağız. <span id="more-63"></span></p>
<p>script.aculo.us kütüphanesinin efektleri, sürükle-bırak, sıralama, otomatik tamamlama gibi işlerinizi kolaylaştıracak kontrolleri ve DOM öğelerini üretebilen özellikleri barındırdığından bahsetmiştik. Bu ay efekt kullanımına değineceğiz. Geçen ayki yazıya ulaşamayanlar pctech.com.tr adresini ziyaret edebilirler.</p>
<p>Geçen ay da değindiğimiz bir iki şeyin üzerinden yine geçelim. Efekt kullanımından standart söz dizimi</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod012.png" alt="kod012.png" /></p>
<p>şeklindedir. Her efekt için gerekli parametre olmayabilir. İleride efektlere tek tek değinirken kullanılıp kullanılmadığına da yer vereceğiz. Seçenekler de genel veya sadece efekte bağlı olabilir.</p>
<p>Seçenekler bölümünde tüm efektler için ortak parametreler şu şekildedir:</p>
<p><strong>duration :</strong> Efektin saniye cinsinden uygulanma süresi (Varsayılan: 1.0).<br />
<strong>fps :</strong> Efekti bir film gibi düşünün. İşte bu ayar efektin saniye başına kaç kare olacağını belirler. 25&#8242;in üstünü zaten insan gözü algılamaz <img src='http://erhanabay.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (Varsayılan: 25. En fazla 100 olabilir.)<br />
<strong>transition :</strong> Geçişin nasıl olacağınız belirler. Kullanılabilecek değerler: Effect.Transitions.sinoidal (varsayılan), Effect.Transitions.linear, Effect.Transitions.reverse, Effect.Transitions.wobble ve Effect.Transitions.flicker<br />
<strong>from :</strong> Geçişin (transition) başlangıç noktasını belirler. 0.0 ve 1.0 arasında bir değer olabilir (Varsayılan: 0.0).<br />
<strong>to :</strong> Geçişin bitiş noktasını belirler. 0.0 ve 1.0 arasında bir değer olabilir (Varsayılan: 0.0).<br />
<strong>sync :</strong> Efektin kareleri otomatik olarak gösterip göstermeyeceğini belirler. &#8216;True&#8217; değeri verildiğinde efektin render() metodu çağırılarak kareler kontrol edilebilir. &#8216;Paralel&#8217; efektinde kullanılır.<br />
<strong>queue :</strong> Efektin hangi sırada olacağını belirler. Kullanımına daha sonra değineceğiz.<br />
<strong>direction :</strong> Geçişin yönünü belirler. &#8216;top-left&#8217;, &#8216;top-right&#8217;, &#8216;bottom-left&#8217;, &#8216;bottom-right&#8217; veya &#8216;center&#8217; (varsayılan) değerlerini alabilir ve sadece &#8216;Grow&#8217; ve &#8216;Shrink&#8217; efektlerinde kullanılabilir.</p>
<p>Bunlar dışında seçenekler içerisine parametre olarak kendi fonksiyonlarınızı da dahil edebilirsiniz. Böylece efekt çalıştırılmaya devam ederken belirtilen olaylara bağlı olarak sizin fonksiyonunuz da çalıştırılır. Efekt nesnesi fonksiyonunuza parametre olarak geçirilir. Bu sayede efekt nesnesine de erişerek kendi fonksiyonunuzda kullanabilirsiniz. Kullanabileceğiniz olaylar şunlardır:</p>
<p><strong>beforeStart :</strong> Belirtilen fonksiyon efekt gösteriminin döngüsü başlamadan önce çağırılır.<br />
<strong>beforeUpdate :</strong> Gösterim döngüsünün her bir tekrarında, değişim gerçekleşmeden önce çağırılır.<br />
<strong>afterUpdate :</strong> Gösterim döngüsünün her bir tekrarında, değişim gerçekleştekten sonra çağırılır.<br />
<strong>afterFinish :</strong> Efekt gösteriminin döngüsü bittikten sonra çağırılır.</p>
<p>Kuru kuru bunların ne anlama geldiğini kavramada sorun olabilir o yüzden örneklere geçmeden bir kod örneği verelim.</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod022.png" alt="kod022.png" /></p>
<p>Fonksiyonunuza parametre olarak geçirdiğiniz efekt nesnesinin erişebileceğiniz tüm özellikleri de şu şekilde:</p>
<p><strong>effect.element :</strong> Efektin uygulandığı sayfa öğesi.<br />
<strong>effect.options :</strong> Efekte ait seçenekler.<br />
<strong>effect.currentFrame :</strong> Gösterilen son karenin numarası.<br />
<strong>effect.startOn :</strong> Efektin başlatıldığı zamanın milisaniye cinsinden değeri.<br />
<strong>effect.finishOn :</strong> Efektin bitirildiği zamanın milisaniye cinsinden değeri.<br />
<strong>effect.effects[] :</strong> &#8216;Parallel&#8221; efektinde her bir alt efektin tutulduğu bir effects[] dizisi bulunur. Her bir alt efekte bu dizi içerisinden erişilebilir.</p>
<p><strong>Efektler</strong><br />
script.aculo.us kütüphanesi 5 esas efekte sahiptir. Bir de bunların üzerine kurulu çeşitli birleşim efektleri vardır. Bu sayımızda temel efektleri ele alacağız.</p>
<p><strong>Effect.Opacity:</strong><br />
Sayfa öğesinin saydamlığını değiştirir.</p>
<p align="center">&nbsp;</p>
<p><em>Genel söz dizimi:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod032.png" alt="kod032.png" /></p>
<p><em>Örnek:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod042.png" alt="kod042.png" /></p>
<p>Öğeye tıklandığında 2 saniye içerisinde (duration:2.0) saydamlık %100&#8242;den (from:1.0) %0&#8242;a (to:0.0) düşecek, yani kaybolacak.</p>
<p><strong>Effect.Scale:</strong><br />
Sayfa öğesinin boyutlarını değiştirir. En ve boy &#8216;em&#8217; birimine göre değiştirilir.</p>
<p><em>Genel söz dizimi:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod052.png" alt="kod052.png" /></p>
<p><em>Efekte özel seçenekler:</em><br />
<strong> scaleX :</strong> Yatay olarak boyutlandırma (Varsayılan: &#8216;true&#8217;).<br />
<strong> scaleY :</strong> Dikey olarak boyutlandırma (Varsayılan: &#8216;true&#8217;).<br />
<strong> scaleContent :</strong> İçeriğin de boyutlandırılması (Varsayılan: &#8216;true&#8217;).<br />
<strong> scaleFromCenter :</strong> Öğenin merkez koordinatlarının sabitlenmesi (Varsayılan: &#8216;false&#8217;).<br />
<strong> scaleMode :</strong> Öğenin görülebilen bölgesinin boyutlandırılmasını sağlayan &#8216;box&#8217; (varsayılan), öğenin tamamının boyutlandırılmasını sağlayan &#8216;contents&#8217; değerlerini alabilir. &#8216;originalHeight&#8217; ve &#8216;originalWidth&#8217; değişkenleri kullanılarak uygulanacak boyutun tam değerleri de verilebilir.<br />
<strong> scaleMode :</strong> { originalHeight: 400, originalWidth: 200 }<br />
<strong> scaleFrom :</strong> Boyutlandırmanın başlangıç yüzdesi (Varsayılan: 100.0).</p>
<p><em>Örnek:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod062.png" alt="kod062.png" /></p>
<p>Bağlantıya tıklandığında yazı %120 oranında büyütülecek.</p>
<p><strong>Effect.MoveBy:</strong><br />
Öğe x ve y piksel kadar yer değiştirir.</p>
<p><em>Genel söz dizimi:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod071.png" alt="kod071.png" /></p>
<p><em>Örnek:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod08.png" alt="kod08.png" /></p>
<p>Bağlantıya tıklandığında yazı 5 piksel yukarı, 20 piksel de sağa kayacak. Bu arada ekranın sol üst köşesinin (0,0) noktası olduğunu hatırlatalım.</p>
<p><strong>Effect.Highlight:</strong><br />
Öğenin arka plan rengini değiştirir, vurgu yapar.</p>
<p><em>Genel söz dizimi:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod09.png" alt="kod09.png" /></p>
<p><em>Efekte özel seçenekler:</em><br />
<strong> startcolor :</strong> Efekt başlangıcındaki arka plan rengi (Varsayılan: &#8216;#ffff99&#8242;, açık sarı).<br />
<strong> endcolor :</strong> Efekt bitişindeki arka plan rengi (Varsayılan: &#8216;#ffffff&#8217;, beyaz).<br />
<strong> restorecolor :</strong> Efekt bittikten sonraki arka plan rengi (Varsayılan: CSS değerlerindeki &#8216;background-color&#8217; değeri. &#8216;rgb(0, 255, 0)&#8217; şeklinde belirtilmiş olmalı).</p>
<p><em>Örnek:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod10.png" alt="kod10.png" /></p>
<p>Öğeye tıklandığında arka plan rengi pembeden griye dönüşecek.</p>
<p><strong>Effect.Parallel:</strong><br />
Birden fazla efektin aynı anda uygulanabilmesini sağlar.</p>
<p><em>Genel söz dizimi:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod11.png" alt="kod11.png" /></p>
<p><em>Örnek:</em></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod12.png" alt="kod12.png" /></p>
<p>&#8216;MoveBy&#8217; ve &#8216;Opacity&#8217; efektleri aynı öğeye uygulanıyor ve efekt bittiğinde öğe gizleniyor.</p>
<p><em>Bu yazı Aralık 2006 tarihinde PC Tech dergisinde yayınlanmıştır.</em></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=63&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/05/17/scriptaculous-efektleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>script.aculo.us</title>
		<link>http://erhanabay.com/2007/05/17/scriptaculous/</link>
		<comments>http://erhanabay.com/2007/05/17/scriptaculous/#comments</comments>
		<pubDate>Thu, 17 May 2007 21:27:59 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/05/17/scriptaculous/</guid>
		<description><![CDATA[Geçen ayki prototype pencere sınıfı örneğinden sonra sıradaki prototype tabanlı kütüphanemiz script.aculo.us. script.aculo.us Web 2.0 uygulamaları geliştirenlerin projelerine hoş efektler ekleyebilecekleri bir javascript kütüphanesi. Uzun bir zamandır dergimizde sizlere AJAX konusunda çeşitli bilgiler vermeye, örnekler ile kütüphaneleri nasıl kullanabileceğinize dair örnekler vermeye çalışıyoruz. Türkçe olarak internette çok kısıtlı içeriğin yer aldığı bu konuda PC Tech [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://erhanabay.com/wp-content/uploads/2007/05/scriptaculous_logo.png" title="scriptaculous_logo.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/scriptaculous_logo.thumbnail.png" title="scriptaculous_logo.png" alt="scriptaculous_logo.png" align="right" border="0" /></a>Geçen ayki prototype pencere sınıfı örneğinden sonra sıradaki prototype tabanlı kütüphanemiz script.aculo.us. script.aculo.us Web 2.0 uygulamaları geliştirenlerin projelerine hoş efektler ekleyebilecekleri bir javascript kütüphanesi.</p>
<p><span id="more-62"></span></p>
<p>Uzun bir zamandır dergimizde sizlere AJAX konusunda çeşitli bilgiler vermeye, örnekler ile kütüphaneleri nasıl kullanabileceğinize dair örnekler vermeye çalışıyoruz. Türkçe olarak internette çok kısıtlı içeriğin yer aldığı bu konuda PC Tech olarak sizlere uzman düzeyinden ziyade başlangıç düzeyi bilgiler vererek en azından işin bir ucundan AJAX bulaşmanızı ve geleceğin web uygulamalarını geliştirenler arasında yer alabilmenizi sağlamak asıl amacımız. Balık tutmayı öğretmek balık vermekten iyidir. Eğer bu yeni akıma dahil olduysanız ve kendi uygulamalarınızı geliştirme süreci içerisindeyseniz size Türkçe bir AJAX grubuna yönlendirelim. &#8216;Ajax Nedir&#8217; adlı bu gruba <a href="http://groups.google.com/group/ajaxnedir" target="_blank" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/ajaxnedir?referer=');">http://groups.google.com/group/ajaxnedir</a> adresinden üye olabilirsiniz. Emekleme aşamasındaki bu kullanıcı topluluğunun ilerlemesine katkıda bulunmak isteyenlere duyurulur. İngilizce içerik içinse ajaxian.com&#8217;u takip ederek gelişmelerden haberdar olabilirsiniz.</p>
<p>Şimdi gelelim asıl konumuza, script.aculo.us. Yine söylemekten kendimizi alamayacağız ama script.aculo.us prototype çatısı üzerine kurulmuş ve â€“tabir-i caizse- yanarlı dönerli sayfalar tasarlamak için birçok görsel efekti size sunan bir kütüphane. Kütüphane içerisinde efektler yanında sürükle-bırak, sıralama, otomatik tamamlama gibi işlerinizi kolaylaştıracak kontroller de yer alıyor. Ayrıca DOM elemanlarını (daha açık olmak gerekirse HTML tarzı kodları) üretebilen özelliğini de dinamik olarak sayfa içi güncelleme sırasında kullanabilirsiniz.</p>
<p><strong>Kullanım</strong><br />
<a href="http://script.aculo.us" target="_blank" onclick="pageTracker._trackPageview('/outgoing/script.aculo.us?referer=');">http://script.aculo.us</a> adresinden indirebileceğiniz kütüphanenin arşiv dosyasında birçok JS dosyası yer alıyor. script.aculo.us kütüphanesinin doğru çalışması için gerekenlerden prototype.js, scriptaculous.js, builder.js, effects.js, dragdrop.js, slider.js and controls.js dosyalarını bir klasöre aktarın ve script.aculo.us kullanmak istediğiniz sayfanın HEAD etiketi içerisinde bağlantı verin.</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod011.png" alt="kod011.png" /></p>
<p>scriptaculous.js dosyası varsayılan olarak tüm diğer javascript dosyalarını yükler. Eğer sayfa içerisinde sadece kullanmak istediğiniz özelliğe ait dosyaları yüklemek isterseniz kodu aşağıdaki gibi düzenleyebilirsiniz.</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod021.png" alt="kod021.png" /></p>
<p>Burada virgüller ile ayrılmış değerler klasöre kopyaladığınız dosyaların isimlerinden ibaret. Örnekler vermeye başladıkça hangi dosyanın nerede kullanıldığını daha rahat anlayacaksınız. Ama dikkat edilmesi gereken nokta bu paketlerin (özelliklerin ayrı olarak dosyalanmasından dolayı bu kelimeyi tercih ettik) birbiri ile olan bağımlılık durumunun gözden kaçırılmaması.</p>
<p>Bir script.aculo.us efekti kullanmak istediğimizde bunun iki yolu var. Birincisi SCRIPT etiketi içerisinde istediğimiz fonksiyonu çağırmak;</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod031.png" alt="kod031.png" /></p>
<p>diğeri de sayfa elemanı özelliklerinde istediğimiz efektin sınıfından birini kopyalayarak olaya bağlamak.</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod041.png" alt="kod041.png" /></p>
<p>İlk yöntemde sayfa tarayıcı tarafından yorumlanırken bu kısma gelindiğinde javascript kodu da çalıştırılacak, ikinci de ise DIV ile sınırlandırılan bölgeye tıklandığında efekt bu etikete uygulanacak.</p>
<p>Uygulanabilecek tüm efektlerin listesi şu şekilde:</p>
<blockquote><p>Effect.Highlight<br />
Effect.MoveBy<br />
Effect.Opacity<br />
Effect.Parallel<br />
Effect.Scale<br />
Effect.Appear<br />
Effect.BlindDown<br />
Effect.BlindUp<br />
Effect.DropOut<br />
Effect.Fade<br />
Effect.Fold<br />
Effect.Grow<br />
Effect.Puff<br />
Effect.Pulsate<br />
Effect.Shake<br />
Effect.Shrink<br />
Effect.SlideDown<br />
Effect.SlideUp<br />
Effect.Squish<br />
Effect.SwitchOff</p></blockquote>
<p>Tüm efektlerin nasıl çalıştığını <a href="http://wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo" target="_blank" onclick="pageTracker._trackPageview('/outgoing/wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo?referer=');">http://wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo</a> adresinden kontrol edebilirsiniz.</p>
<p>Bir efekte değiştirgen parametre ile değer geçirmediğiniz sürece varsayılan değerler ile işini yapacaktır. Dilerseniz bu parametrelerin neler olduğuna da bir bakalım.</p>
<p>Bir efektin genel kullanımı</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod051.png" alt="kod051.png" /></p>
<p>şeklindedir. Her efekt için gerekli parametre yok. Kullanılan parametreler ve seçenekleri örneklerde geçtiğinde açıklamaya çalışacağız.</p>
<p>Küçük bir örnek vermek gerekirse de</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod061.png" alt="kod061.png" /></p>
<p>Kodu bir olaya bağlamak olarak verdiğimiz 2 yöntemdeki gibi bir kullanımla sayfa elemanını (örneğin DIV) 0.5 saniye içinde görünmez hale getirecektir &#8217;0.0&#8242; değerini 0&#8242;la 1 arasında bir değer olarak belirlerseniz de şeffaf bir görünüm elde edebilirsiniz. Ya da &#8216;from:&#8217; seçeneği sayısal değer olarak &#8216;to:&#8217; seçeneğinden daha küçük olursa şeffaflığı azalan bir görünüm oluşacaktır.</p>
<p>Aslında bu sayı AJAX yazısı biraz kısa gibi oldu ama script.aculo.us ile en az 1-2 sayı daha uğraşacağımızı göz önünde bulundurduğumuzda biraz sindirerek gitmek gerektiğini düşündük. O yüzden efektlerin nasıl kullanıldığına dair ısınma turlarını içeren bu yazının ardından kontrolleri de katarak Web 2.0&#8242;a yakışır sayfaları tasarlamayı sonraya bırakmak istedik. Bu ay örnekler olmadığından size örnekleri test edebileceğiniz bir adres de veremiyoruz. Ama bir sürprizimiz var! Pctech.com.tr yenilendi. Aslında bu satırları yazarken son rötuşlar yapılmaya devam ediliyor bu yüzden aksilik çıkmazsa diye sonuna eklememiz gerek. Ama yeni haliyle beraber daha güncel ve dolu dolu bir pctech.com.tr&#8217;de de AJAX ile olan sohbetlerimize yer vermeyi düşünüyoruz. İçerik olarak iddialı olacağımızı şimdiden söylemek isterim. Ödev yok, paydos! <img src='http://erhanabay.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p><strong> Desteklenen Tarayıcılar</strong><br />
* Microsoft Internet Explorer 6.0+ (Windows için)<br />
* Mozilla Firefox 1.0+/Mozilla 1.7+<br />
* Apple Safari 1.2+<br />
* Konqueror<br />
* Camino<br />
* Opera 7.54 (AJAX ve şeffaflık kullanan efektler desteklenmiyor)<br />
* Opera 8 (şeffaflık kullanan efektler desteklenmiyor)<br />
* Opera 9+</p></blockquote>
<p><em>Bu yazı Kasım 2006 tarihinde PC Tech dergisinde yayınlanmıştır.</em></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=62&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/05/17/scriptaculous/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prototype pencere sınıfı</title>
		<link>http://erhanabay.com/2007/05/17/prototype-pencere-sinifi/</link>
		<comments>http://erhanabay.com/2007/05/17/prototype-pencere-sinifi/#comments</comments>
		<pubDate>Thu, 17 May 2007 21:15:22 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/05/17/prototype-pencere-sinifi/</guid>
		<description><![CDATA[Prototype aşağı, prototype yukarı! Aslında tüm özelliklerini örneklendiremesek bile öğrenmek isteyenlere önayak olduğumuzu düşünüyoruz. Bu aydan itibaren yine prototype için mevcut eklentiler ile kütüphanenin nasıl daha kullanışlı hale getirilebileceğini görelim. Yazımıza Prototype çatısı ile devam ettiğimizden beri bunun temel bir kütüphane olduğuna ve bazı çatıların da temelini oluşturduğuna değinmiştik. Javascript ile kod yazmayı daha pratik [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://erhanabay.com/wp-content/uploads/2007/05/proto.png" title="proto.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/proto.thumbnail.png" title="proto.png" alt="proto.png" align="right" border="0" /></a>Prototype aşağı, prototype yukarı! Aslında tüm özelliklerini örneklendiremesek bile öğrenmek isteyenlere önayak olduğumuzu düşünüyoruz. Bu aydan itibaren yine prototype için mevcut eklentiler ile kütüphanenin nasıl daha kullanışlı hale getirilebileceğini görelim.</p>
<p><span id="more-35"></span></p>
<p>Yazımıza Prototype çatısı ile devam ettiğimizden beri bunun temel bir kütüphane olduğuna ve bazı çatıların da temelini oluşturduğuna değinmiştik. Javascript ile kod yazmayı daha pratik hale getiren temelin üzerine kurulmuş bu eklentilerden biri olan pencere sınıfı ile sayfalarınızda ziyaretçilerinizin gözüne hoş gelebilecek, tabir-i caizse, sözde pencereler oluşturmak gerçekten çok kolay. Üstelik bu pencereler açılır pencere engelleyiciler tarafından da engellenmiyor <img src='http://erhanabay.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<strong>Pencere sınıfını nasıl kullanabiliriz?</strong><br />
Öncelikle <a href="http://prototype-window.xilinus.com/download.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/prototype-window.xilinus.com/download.html?referer=');">http://prototype-window.xilinus.com/download.html</a> adresinden en son sürümü (şu anki sürüm 0.96.2) indirmekle başlayabiliriz. Arşiv dosyasını açtığınızda birçok dosya göreceksiniz. Bizim ilgilendiklerimiz ise &#8216;javascripts&#8217; klasöründeki window.js, effects.js ve tabii ki prototype.js. Bunlar dışında da pencerelerin biçimlendirilmesinde kullanılan &#8216;themes&#8217; klasörüne ihtiyacımız olacak.</p>
<p>Daha sonra ki işlemimiz de sayfamızın &#8216;head&#8217; etiketi içerisine javascript ve css dosyalarını aşağıdaki gibi eklemek.</p>
<p align="center"><img src="http://erhanabay.com/wp-content/uploads/2007/05/html1.png" alt="html1.png" /></p>
<p>CSS dosyalarının tümünü eklemek zorunda değiliz. default.css , dışında sadece kullanacaklarınızı ekleyip diğerlerini göz ardı edebilirsiniz.</p>
<p><em>Not: Örnekler içerisinde göreceğiniz uyarı ve onay pencereleri için alert.css dosyası da eklenmelidir.</em></p>
<p>Şimdi ilk pencere örneğimize geçebiliriz.</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/html2.png" alt="html2.png" /></p>
<p>Örnekte öncelikle &#8216;Window&#8217; adlı nesneden &#8216;pencere1&#8242; adıyla kendimize de bir tane kopyaladık ve özelliklerini de parantez içindeki kısımda belirledik. Buradaki değerler içerisinde &#8216;pencere1&#8242;, pencere oluşturulurken kullanılan katmanın &#8216;id&#8217; özelliği olacak. Böylece müdahale etmek istediğimizde &#8216;getElementById&#8217; ile bu sayfa öğesine erişim gerçekleştirilebilir. &#8216;className&#8217; için de yukarıda eklediğimiz CSS dosyalarının isimlerini dosya türü olmadan (yani .css olmadan) kullanıyoruz. &#8216;title&#8217; penceremizin başlığı, &#8216;width&#8217; genişliği, &#8216;height&#8217; da yüksekliği belirler. &#8216;.getContent().innerHTML&#8217; ile pencere içeriğini oluşturduktan sonra &#8216;.setDestroyOnClose()&#8217; ile pencereyi kapattığımızda kopyaladığımız nesnenin ortadan kaldırılmasını sağlıyoruz. Eğer bunu yapmazsak pencere sayfada görüntülenmese dahi bellekten silinmediyse tekrar açılmasını istediğimizde aşağıdaki hatayı alacağız. İçerikte HTML kodlarını da kullanabilirsiniz.</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/hata.png" alt="hata.png" /></p>
<p>En son satırdaki &#8216;.showCenter()&#8217;la da penceremizi sayfada ortalıyoruz. Tüm bu işlemleri &#8216;pencereGoster1()&#8217; adlı fonksiyonumuzun içerisine yerleştirdiğimiz için tıklandığında açılması için bir bağlantı içerisinde çağırıyoruz. İşte örneğimiz!</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/pencere1.png" alt="pencere1.png" /></p>
<p><strong>Pencerede farklı bir adresi görüntüleme</strong></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/html3.png" alt="html3.png" /></p>
<p>Eğer pencere özelliklerinde &#8216;url&#8217; ile bir adres tanımlarsak pencere içerisinde bu adres görüntülenecektir. Bu durumda &#8216;.getContent().innerHTML&#8217;i kullanmamıza gerek kalmıyor.</p>
<p><strong>Uyarı</strong></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/html4.png" alt="html4.png" /></p>
<p>Uyarı pencereleri için &#8216;Dialog.alert()&#8217;i kullanacağız. Parantez içerisinde yapacağımız ile tanımlama pencere içeriğini, &#8216;windowsParameters&#8217; kısmı &#8216;Window&#8217; nesnesindeki tüm özellik tanımlamalarını yapmamızı sağlıyor. &#8216;okLabel&#8217; da pencereyi kapatmamızı sağlayan butonun değerini belirliyor. &#8216;Dialog&#8217; modülünün özelliği, pencerenin diğer tüm sayfanın üzerine bir katman olarak gelip sayfadaki bağlantı, buton gibi kullanıcı etkileşimli öğeleri etkinsizleştirmesidir.</p>
<p align="center"><img src="http://erhanabay.com/wp-content/uploads/2007/05/pencere2.png" alt="pencere2.png" /></p>
<p><strong>İçerik olarak sayfadan bir bölümü kullanma</strong></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/html5.png" alt="html5.png" /></p>
<p>En alttaki &#8216;pencere_icerigi&#8217; &#8216;id&#8217; özelliğine sahip alanı fark etmiş olmalısınız. Şimdi bu alanı penceremizin içeriği olarak görüntüleyeceğiz. Bunun için &#8216;.setContent()&#8217; özelliğini kullanıyoruz. &#8216;.setContent()&#8217; içerisinde öncelikle sayfa elemanının &#8216;id&#8217;sini tanımlayıp daha sonra da boyut ve yerleşim özelliklerini &#8216;true&#8217; ile otomatik hale getiriyoruz. Ardından &#8216;.toFront()&#8217; ile de sayfadaki tüm pencerelerden önde görünmesini sağlıyoruz. Kod içerisinde &#8216;Windows&#8217; nesnesinde kullanılan bazı yeni özelliklerine de yer verdik. Örneğin &#8216;resizable: false&#8217; ile yeniden boyutlandırılamaz, &#8216;minWidth: 10&#8242; ile en az 10px genişliğinde, &#8216;maxWidth: 300&#8242; ile de en fazla 300px genişliğinde bir pencere tanımlaması yapmış oluyoruz. Değişiklikleri pencere büyültme ve küçültme butonlarını kullanarak görebilirsiniz.</p>
<p><strong>Onay penceresi</strong></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/html6.png" alt="html6.png" /></p>
<p>&#8216;Dialog&#8217; için &#8216;confirm&#8217; özelliğini kullanarak şimdi de bir onay penceresi oluşturacağız. &#8216;alert&#8221; özelliğinden farkı onaylama dışında iptal etme için de bir seçeneğimizin olması. Seçime bağlı olarak da istediğimiz fonksiyonu çağırarak uygun işlemin yapılmasını sağlayabiliriz. &#8216;(ok|cancel)Label&#8217; özellikleri ile onay ve iptal butonlarımızın değerlerini belirlerken tıklanan butona göre &#8216;ok|cancel&#8217; iş bitirici fonksiyonumuzu devreye sokuyor.</p>
<p><strong>İletişim penceresi</strong></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/html7.png" alt="html7.png" /></p>
<p>Yine bir &#8216;Dialog&#8217; fakat bu kez &#8216;info&#8217;. 5&#8242;ten geri sayarak açılan pencereyi otomatik kapatan, bunun dışında farklı bir kapatma seçeneği olmayan bir pencere. Elimizde &#8216;iletisimKutusuAc()&#8217; ve &#8216;zamanBilgisi()&#8217; olarak 2 fonksiyon bulunuyor. Birinci fonksiyon iletişim kutusunu oluşturuyor; diğeri ise geri sayım ve pencere içeriğinde buna bağlı güncellemeyi gerçekleştiriyor.<br />
Pencere özellikleri içerisinde &#8216;showProgress: true&#8217; dikkatinizi çekmiş olabilir. Bu, pencere içerisinde bir &#8216;işlem yapılıyor&#8217; anlamına gelen resmin görüntülenmesini sağlıyor. &#8216;setTimeout(zamanBilgisi, 1000)&#8217; satırları ile &#8216;zamanBilgisi()&#8217; fonksiyonu 1&#8242;er saniyelik gecikmelerle çağırılarak çalıştırılıyor.</p>
<p>&#8216;zamanBilgisi()&#8217; fonksiyonuna bakarsanız da öncelikle başlangıçta &#8217;5&#8242; olarak belirlenen süre 1 saniye azaltılıyor. Daha sonra da saniyenin 0 olmaması koşulu ile pencere içeriği &#8216;.setInfoMessage()&#8217; ile güncelleniyor. 0 olduğu takdirde de &#8216;.closeInfo()&#8217; ile kapatılıyor.</p>
<p><strong>AJAX iş başında!</strong></p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/html8.png" alt="html8.png" /></p>
<p>Penceremizin içeriğini AJAX ile yapacağımız istek sayesinde belirlememizi sağlayan kodumuz son örnek olarak karşımızda. &#8216;.setAjaxContent()&#8217; ile gerçekleştirdiğimiz bu işlem aslında geçen haftalarda anlattığımız &#8216;Ajax.Request&#8217;tin ta kendisi. &#8216;ajax_cevap.php&#8217; sayfasına &#8216;GET&#8217; metodu ile gönderdiğimiz veri pencere içerisinde biçimlendirilerek görüntüleniyor.</p>
<p>Bu ay ki örneklerimizi de burada sonlandırdık. <a href="/wp-content/uploads/2007/05/prototype_pencere/index.html" target="_blank">Buradan</a> tüm örnekleri kontrol edebilirsiniz. Önümüzdeki sayıda yine prototype temelli bir kütüphane olan script.aculo.us ile devam edeceğiz.</p>
<blockquote><p><strong>Efektler</strong><br />
Kullandığımız sınıf, pencerelerin açılıp kapanması sırasında efektler kullanabilmemize olarak sağlıyor. Prototype temelli bir kütüphane olan script.aculo.us içerisindeki efektlerin dahil edildiği sınıfta pencere özelliklerinde showEffect ve hideEffect ile pencerelerin nasıl açılıp nasıl kapanacağını belirleyebilirsiniz. Örneğin,</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/html9.png" alt="html9.png" /></p>
<p>Daha fazla örnek için <a href="http://wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo" target="_blank" onclick="pageTracker._trackPageview('/outgoing/wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo?referer=');">http://wiki.script.aculo.us/scriptaculous/show/CombinationEffectsDemo</a> adresini kontrol edebilirsiniz.</p></blockquote>
<p><em>Bu yazı Ekim 2006 tarihinde PC Tech dergisinde yayınlanmıştır.</em></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=35&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/05/17/prototype-pencere-sinifi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prototype ile form gönderimi</title>
		<link>http://erhanabay.com/2007/05/16/prototype-ile-form-gonderimi/</link>
		<comments>http://erhanabay.com/2007/05/16/prototype-ile-form-gonderimi/#comments</comments>
		<pubDate>Wed, 16 May 2007 19:54:56 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/05/16/prototype-ile-form-gonderimi/</guid>
		<description><![CDATA[Geçen ay Prototype kütüphanesi hakkında giriş niteliğinde bir yazı ile karşınıza çıkmıştık. Bazı temel özelliklerinden söz ettiğimiz ve küçük örnekler yaptığımız Javascript kütüphanesiyle bu ay bir kullanıcı kayıt formu yapacağız. Klasik web uygulamalarında form kullanıcı tarafından doldurulur ve sunucuya gönderilir. Eğer uygulamayı yazan kişi sunucu tarafında gelen verinin doğruluğunu kontrol ediyorsa istenmeyen bilginin düzenlenmesi için [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://erhanabay.com/wp-content/uploads/2007/05/prototype.png" title="prototype.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/prototype.png" title="prototype.png" alt="prototype.png" align="right" border="0" /></a>Geçen ay Prototype kütüphanesi hakkında giriş niteliğinde bir yazı ile karşınıza çıkmıştık. Bazı temel özelliklerinden söz ettiğimiz ve küçük örnekler yaptığımız Javascript kütüphanesiyle bu ay bir kullanıcı kayıt formu yapacağız.</p>
<p><span id="more-29"></span></p>
<p>Klasik web uygulamalarında form kullanıcı tarafından doldurulur ve sunucuya gönderilir. Eğer uygulamayı yazan kişi sunucu tarafında gelen verinin doğruluğunu kontrol ediyorsa istenmeyen bilginin düzenlenmesi için sayfa tekrar kullanıcıya iletilir. Bu sunucu-istemci paslaşması istenen bilgi elde edilene kadar sürer. En azından bir kere de olsa girdiğiniz kullanıcı adı kullanıldığı için farklı bir ad seçmenizi isteyen uyarıyla karşılaşmış, hatta bu yüzden doğru da olsa güvenlik nedeniyle tarayıcıya geri gönderilmeyen şifre ve şifre tekrar alanlarını defalarca doldurma durumuyla karşı karşıya gelmiş olmalısınız. Her defasında sunucu ve istemci arasındaki bu paslaşmada veri iletimini ve sinir krizini azaltacak AJAX&#8217;ın kullanımını bir örnek ile göstermeye çalıştık.</p>
<p>Kütüphane olarak kullandığımız Prototype projesinin internet adresi <a href="http://prototype.conio.net" target="_blank" onclick="pageTracker._trackPageview('/outgoing/prototype.conio.net?referer=');">prototype.conio.net</a>. En son sürümünü (şu anda 1.4.0) buradan indirebilirsiniz.</p>
<p align="center"><a href="/wp-content/uploads/2007/05/kayit.html" target="_blank"><img src="http://erhanabay.com/wp-content/uploads/2007/05/sayfa.png" title="sayfa.png" alt="sayfa.png" border="0" /></a></p>
<p align="center">&nbsp;</p>
<p>Uygulamamızın senaryosunda kullanıcı kayıt olabilmek için kullanıcı adı, şifre ve e-posta adresi bilgilerini doldurup &#8216;Gönder&#8217; butonuna tıklamalı. Butona tıklandıktan sonra veriler Ajax nesnesi ile sunucuya gönderiliyor ve hatalar ve başarılı gönderim bilgisi form bölümünün üstünde görüntüleniyor. Bu sırada form sürekli olarak değişmeden kalıyor. Uygulamamızın sadece fikir verici bir niteliği olduğunu tekrar hatırlatalım. Yani aynen alıp sitenizde kullanabileceğiniz bir uygulama değil.</p>
<p><strong>Formu yapılandıralım</strong><br />
Senaryomuza uygun şekilde 3 giriş alanı ve bir butona sahip formu oluşturduk. Yazdığımızı görebilmek için şifre girişinde &#8216;input&#8217; öğesinin &#8216;type özelliği &#8216;için &#8216;password&#8217; yerine &#8216;text&#8217; kullandık. Ayrıca &#8216;Gönder&#8217; butonumuz da &#8216;type&#8217; özelliği &#8216;submit&#8217; yerine &#8216;button&#8217; değerine sahip. Fark ettiyseniz &#8216;form&#8217; öğesinin &#8216;action&#8217; özelliği <em>formGonder()</em> fonksiyonumuzu çağırıyor. Bunun nedeni ise &#8216;Enter&#8217; ile formun gönderilmesini istememize rağmen Opera 9&#8242;da bunun çalışması. IE 6 ve Firefox 1.5&#8242;te ise herhangi bir işlevi yok. Form öğesinin üst kısmında içi boş olan ve &#8216;id&#8217; özelliği &#8216;kayitSonucUyari&#8217; olan ve bizim sunucudan gelen mesajları görüntüleyeceğimiz bölüm yer alıyor. &#8216;body&#8217; öğesinin bitiminden hemen önce gördüğünüz &#8216;İşlem yapılıyor&#8217; mesajı alanı ise çok sık karşılaştığımız işlemin devam ettiğini gösteren bir uyarı. Sayfayı ilk açtığınızda butona tıklayana kadar bu mesajı göreceksiniz. Bu sorunun varlığından haberdarız ama Prototype örneklerinden almamıza rağmen çözüm üretemediğimizi itiraf etmek zorundayız <img src='http://erhanabay.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Ama ilk form gönderiminden sonra normal çalışıyor.</p>
<p><strong>Javascript fonksiyonlarımızı oluşturalım</strong><br />
<em> formGonder()</em> ve <em>cevap()</em> adlı iki adet fonksiyonumuz bulunuyor. İsimlerinde anlaşıldığı üzere biri formun gönderiminden diğeri de dönen cevaptan sorumlu. <em>formGonder()</em> fonksiyonunda öncelikle &#8216;kayitSonucUyari&#8217; değerli &#8216;id&#8217; özelliğine sahip bölümün herhangi bir içeriğe sahip olsa bile yeni bir gönderim talebinde görüntülenmemesi için CSS sınıfını &#8216;uyariGizli&#8217; olarak değiştiriyoruz (satır 39). Ardından da bir istek tamamlanmadan diğerinin gönderilmesini engellemek için &#8216;Gönder&#8217; butonumuzu kullanıma kapatıyoruz (satır 40). Devam eden satırlarda da geçen ay örneklerle açıkladığımız Ajax nesnesini kullanarak &#8216;kayit.php&#8217; sayfasina talebimizi gönderiyoruz.</p>
<p><em>cevap()</em> fonksiyonu istek-cevap süreci tamamlandıktan sonra çağırılan yordam. İstek başlangıcında görünmez kıldığımız alanı bu kez &#8216;uyariKutu&#8217; CSS sınıfı ile şekillendirip içini de gelen yanıtla doldurup görüntülenmesini sağlıyoruz. Ardından da gönderim butonunu tekrar etkinleştirip yeni istek taleplerine açıyoruz.</p>
<p>İşlem yapılıyor alanının nasıl kontrol edildiğini, yani &#8216;onCreate&#8217; olayı ile &#8216;Ajax&#8217; nesnesinin &#8216;Request&#8217; metodunun oluşturulmasında görüntülenip &#8216;onComplete&#8217; ile cevabın geldiğinde ve herhangi bir etkin bağlantının kalmadığından emin olunarak tekrar gizlenmesini 23. ve 35. satırlar arasındaki kod parçasından kontrol edebilirsiniz.</p>
<p>HTML+Javascript<img src="http://erhanabay.com/wp-content/uploads/2007/05/html.png" alt="html.png" /></p>
<p><strong>PHP ile sunucudan yanıt</strong><br />
Sunucu tarafından formun işlenmesi ve yanıtın verilmesi sürecini kayit.php sayfası ile gerçekleştirdik. Bu kod çok özentili olmamakla birlikte kesinlikle gerçek anlamda sitelerde kullanılmamalıdır. Gelen veri kontrolleri istenilen verinin türüne ve güvenlik seviyesine göre çok daha özenli ve dikkatli yazılmalı ve defalarca test edilmelidir. Ayrıca klasik bir kayıt işleminde veritabanı ile ilgili de bir dizi işlemin gerçekleştirilmesi gerekiyor. Bizim asıl odaklandığımız Ajax olduğundan bu konuları yüzeysel geçmeyi tercih edeceğiz.</p>
<p>PHP<br />
<img src="http://erhanabay.com/wp-content/uploads/2007/05/php.png" alt="php.png" /></p>
<p><em>Bu yazı Eylül 2006 tarihinde PC Tech dergisinde yayınlanmıştır.</em></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=29&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/05/16/prototype-ile-form-gonderimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prototype kullanımı</title>
		<link>http://erhanabay.com/2007/05/16/prototype-kullanimi/</link>
		<comments>http://erhanabay.com/2007/05/16/prototype-kullanimi/#comments</comments>
		<pubDate>Wed, 16 May 2007 19:41:28 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/05/16/prototype-kullanimi/</guid>
		<description><![CDATA[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&#8217;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ı [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://erhanabay.com/wp-content/uploads/2007/05/prototype.png" title="prototype.png"><img src="http://erhanabay.com/wp-content/uploads/2007/05/prototype.png" title="prototype.png" alt="prototype.png" align="right" border="0" /></a><a href="/2007/05/16/60lik-mi-70lik-mi/">Geçen yazımızda</a> 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ş?</p>
<p><span id="more-19"></span></p>
<p>Prototype kütüphanesi aslen AJAX&#8217;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.</p>
<p><strong>Bazı faydalı fonksiyonlar</strong><br />
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.</p>
<p><u>$() fonksiyonu</u><br />
<em>document.getElementById()</em> fonksiyonu için bir kısa yol diyebiliriz. Sayfa içerisinde &#8216;id&#8217; özelliği eşleşen elemanı döndürür. Birden fazla &#8216;id&#8217; verilerek eşleşen elemanlara ait bir dizi oluşturulabilir.</p>
<p align="center"><img src="http://erhanabay.com/wp-content/uploads/2007/05/kod01.png" alt="kod01.png" /></p>
<p>Kod içerisinde ne yapıldığının üzerinden kısaca geçelim. <em>ilkBolum()</em> fonksiyonu sayfada &#8216;id&#8217; özelliği &#8216;bolum1&#8242; olan elemanı alıyor özelliğini ekrana uyarı olarak bastırıyor. <em>butunBölümler()</em> fonksiyonu &#8216;id&#8217; özellikleri &#8216;bolum1&#8242; ve &#8216;bolum2&#8242; 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ı.</p>
<p><u>$A() fonksiyonu</u><br />
$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.</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod03.png" alt="kod03.png" /></p>
<p><u>$F() fonksiyonu</u><br />
Bu fonksiyon da bir önceki gibi kısa yol niteliğinde. &#8216;id&#8217; özelliği eşleşen form elemanının değerini döndürür.</p>
<p align="center"><img src="http://erhanabay.com/wp-content/uploads/2007/05/kod02.png" alt="kod02.png" /></p>
<p><u>$H() fonksiyonu</u><br />
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.</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/kod04.png" alt="kod04.png" /></p>
<p align="center">&nbsp;</p>
<p><u>$R() fonksiyonu</u><br />
<em> new ObjectRange(altSınır, üstSınır, sınırlarHariç)</em> tarzı yazımın kısaltılmış hali diyebiliriz. Örnekteki kullanımda <em>each()</em> metodu yine prototype kütüphanesindeki sayılabilir nesnesinden bir metottur.</p>
<p align="center"><img src="http://erhanabay.com/wp-content/uploads/2007/05/kod05.png" alt="kod05.png" /></p>
<p align="center">&nbsp;</p>
<p><u>Try.these() fonksiyonu</u><br />
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.</p>
<p align="center"><img src="http://erhanabay.com/wp-content/uploads/2007/05/kod06.png" alt="kod06.png" /></p>
<p><strong>AJAX nesnesi</strong><br />
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.</p>
<p>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.</p>
<p><u>Ajax.Request sınıfı</u><br />
<em> Request</em> sınıfı <em>XMLHttpRequest</em> 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.</p>
<p>Ö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.</p>
<p align="center"><img src="http://erhanabay.com/wp-content/uploads/2007/05/kod07.png" alt="kod07.png" /></p>
<p>İstek gönderdiğimiz dinamik sayfa için hem ASP hem de PHP yazdığımız aşağıdaki kodları kullandık. Hangi dilin kullanıldığı vs. gibi şeyler şu anda konumuz dışı ve bunlar sadece birere örnek niteliğinde.</p>
<p>ASP:<br />
<img src="http://erhanabay.com/wp-content/uploads/2007/05/kod_asp.png" alt="kod_asp.png" /></p>
<p>PHP:<br />
<img src="http://erhanabay.com/wp-content/uploads/2007/05/kod_php.png" alt="kod_php.png" /></p>
<p>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 <em>$F(&#8216;AJAXCati&#8217;)</em> 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 <em>&#8220;+ &#8216;&amp;degistirgen2=&#8217; + deger2&#8243;</em> şeklinde devam edecektik.) belirledik. <em>Ajax.Request</em> nesnemizden bir tane <em>ajaxla </em>değişkenine kopyaladık ve gerekli değiştirgenleri de aynı anda tanımladık. Talebi dinamik sayfaya iletmek için <em>GET </em>metodunu kullandık. Cevabın döndüğünden emin olmamızı sağlayan <em>onComplete </em>değiştirgeni için de <em>cevapGoster() </em>fonksiyonunu çağırılacak fonksiyon olarak belirledik. Bu fonksiyon içerisinde de gelen cevabı &#8216;id&#8217; özelliği &#8216;sonuc&#8217; olan kutunun değeri yapan satırı yazdık.</p>
<p><em>Request </em>nesnesi içerisinde tanımlanabilecek bir iki özellik daha bulunuyor. Örneğin işlemin eş zamanlı olup olmayacağının belirlendiği <em>asynchronous </em>gibi (Değer olarak <em>true </em>veya <em>false </em>alabilir. Varsayılan değer <em>true</em>).</p>
<p>Önümüzdeki sayılarda prototype ile uygulamalar geliştirmeye devam edeceğiz. Bu yazıdaki örnekleri <a href="/wp-content/uploads/2007/05/prototype01.html" target="_blank">buradan</a> kontrol edebilirsiniz.</p>
<p><em>Bu yazı Ağustos 2006 tarihinde PC Tech dergisinde yayınlanmıştır.</em></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=19&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/05/16/prototype-kullanimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>60&#8242;lık mı 70&#8242;lik mi?</title>
		<link>http://erhanabay.com/2007/05/16/60lik-mi-70lik-mi/</link>
		<comments>http://erhanabay.com/2007/05/16/60lik-mi-70lik-mi/#comments</comments>
		<pubDate>Wed, 16 May 2007 19:07:43 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/05/16/60lik-mi-70lik-mi/</guid>
		<description><![CDATA[Son 2 sayımızda AJAX&#8217;ın ne olduğundan, faydalarından ve AJAX kullanılarak basit bir örneğin nasıl yapılabileceğinden bahsettik. Artık biraz daha karışık mevzulara girmemizde bir sakınca yok. Bu ay sırada işimizi kolaylaştıracak AJAX çatılarına yer verdik. Hem daha önceki yazıları okuyanlar için bir hatırlatma olarak hem de yeni okuyanlar için kısa bir giriş olması için AJAX&#8217;ın ne [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://erhanabay.com/wp-content/uploads/2007/05/ajax-logo.jpg" title="ajax-logo.jpg"><img src="http://erhanabay.com/wp-content/uploads/2007/05/ajax-logo.jpg" title="ajax-logo.jpg" alt="ajax-logo.jpg" align="right" border="0" /></a>Son 2 sayımızda AJAX&#8217;ın ne olduğundan, faydalarından ve AJAX kullanılarak basit bir örneğin nasıl yapılabileceğinden bahsettik. Artık biraz daha karışık mevzulara girmemizde bir sakınca yok. Bu ay sırada işimizi kolaylaştıracak AJAX çatılarına yer verdik.</p>
<p><span id="more-13"></span><br />
Hem daha önceki yazıları okuyanlar için bir hatırlatma olarak hem de yeni okuyanlar için kısa bir giriş olması için AJAX&#8217;ın ne olduğunu tekrar açıklamaya çalışalım. AJAX bir teknoloji veya dil değildir! AJAX, istemci tarafında çalışan bir betik dili ile sunucu-istemci arasındaki veri alışverişini gerçekleştirip gelen veriyi uygun biçimde işleme tekniğidir. Tanım çok genel olduğu için bunun nasıl yapıldığına dair bir örnek verdiğimizde olay biraz daha anlaşılır olacaktır. Siz kullanıcı olarak bir sayfayı görüntülersiniz ve sayfa içerisinden bir bağlantıya tıkladığınızda tarayıcınız tarafından sunucuya bir istek yapılır. Sunucudan gelen yanıt bir JavaScript fonksiyonu ile alınır ve işlenen (veya işlenmeyen. Veride değişiklik zorunluluğu olmayabilir.) veri ile sayfanın belirli bir bölgesi güncellenir. Kabaca istemci ile sunucu arasındaki AJAX etkileşimi bu şekilde gelişir.</p>
<p>Aslında süreç çok karmaşık gibi görünmüyor. Ama sayfa içerisinde güncellenecek bölgelerin sayısı, sunucudan size veriyi gönderecek â€“yüksek ihtimalle dinamik üretilecek- sayfaların yapılandırılması ve ziyaretçilerinizi etkilemek için yapacağınız görsel cambazlıklar nedeniyle iş karmaşıklığa doğru gitmeye başlıyor. Bir web ustası olarak odaklanmanız gereken noktaya ulaşmak için bir yığın kod ile uğraşmanız gerekiyor. Fakat dert etmeye gerek yok. Sağolsun internet camiasının gönüllüleri ve bazı şirketler bu işleri kolaylaştıran çeşitli kütüphaneleri geliştirmiş ve ustaların tamamen sonuca odaklanarak işi tamamlama süresini kısaltmasını sağlamış. AJAX çatısı tabiri de bu kütüphaneler için kullanılmakta.</p>
<p>Piyasada birçok kütüphane bulunuyor. Bunların bir kısmı ticari kimliğe sahip, bir kısmı ticari ama kazanç elde etmemeniz şartıyla ücretsiz ve çoğu da tamamen bedava. Bu gruplandırmanın yanında kullanım amacına göre özelleşenler de bulunuyor. Örneğin siz PHP, ASP.NET gibi diller ile uygulama geliştiriyorsunuz. JavaScript falan gibi şeylerle uğraşmak da istemiyorsunuz. O zaman size angarya görünen AJAX işlerini kodunuzun içerisinden çağıracağınız fonksiyonlar ile kolayca halledebiliyorsunuz. Bu sadece örneklerden bir tanesiydi. Siz dilden bağımsız bir tercih de yapabilirsiniz. Yani alt katlar için 60&#8242;lık, üst katlar için 70&#8242;lik misali biz de ihtiyaca göre bir çatıyı seçebiliriz. Dilerseniz açık kaynak ve ticari tüm AJAX çatılarına amaçlarına göre kısaca bir göz atalım.</p>
<p><strong>Bazı çok amaçlı kütüphaneler</strong></p>
<p><u>Dojo (<a href="http://dojotoolkit.org" target="_blank" onclick="pageTracker._trackPageview('/outgoing/dojotoolkit.org?referer=');">dojotoolkit.org</a>)</u><br />
Açık kaynak Dojo ile hem sunucu-istemci iletişimini kolayca yönetebileceğiniz fonksiyonları hem de hazır gelen efektleri ile gösterişli sayfalara imza atabilirsiniz. Paket sistemi ile sadece ihtiyacınız olan kütüphaneyi yükleyerek yükleme süresi ve kodlama kolaylığı sağlıyor. Örneğin sadece sürükle-bırak olayını kullanacaksanız tüm çatıyı ziyaretçinin tarayıcısına yükletmek zorunda değilsiniz. Hazır efektlerin yanında kendi zımbırtılarınızı da (widget, İngilizcede zımbırtı anlamına gelen &#8216;gadget&#8217; kelimesinin farklı kullanımı) oluşturabilirsiniz.</p>
<p>Henüz karar aşamasındayız ama ileriki yazılarda geliştireceğimiz uygulamaları Dojo ile yapma olasılığımız çok yüksek. Bu da bir not olarak yer alsın istedik.</p>
<p><u>Backbase (<a href="http://backbase.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/backbase.com?referer=');">backbase.com</a>)</u><br />
AJAX diye Google&#8217;dan arama yaparken karşımıza ilk çıkan sonuçlardan biriydi. Sitesinin güzelliği yanında basitliği ve gücü nedeniyle de aşık olmadık değil. Ama tek sorun ticari olması. Eğer Backbase kullanarak yapacağınız sitenin bir ticari bağlantısı varsa tabiÃ®. Kişisel bir site veya maddi bir çıkarı olmayan sitelerde ise ücretsiz olarak kullanabilirsiniz. Backbase sahip olduğu XML tabanlı BXML dili sayesinde HTML kodu yazmak kadar basit olduğu gibi XML ve Javascript&#8217;in tüm nimetlerinden faydalanabilmenizi de sağlayan bir kütüphaneye sahip.</p>
<p><u>Prototype (<a href="http://prototype.conio.net" target="_blank" onclick="pageTracker._trackPageview('/outgoing/prototype.conio.net?referer=');">prototype.conio.net</a>)</u><br />
Piyasadaki birçok çatının kendine ana kütüphane olarak aldığı AJAX kütüphanesi. İşe temelden girmek isteyen ama yine de elinde temel bir yapı olmasını isteyen geliştiricilerin tercihi olabilir. Sunucu-istemci etkileşimini sınıflar üzerinden kontrol edebilirsiniz.</p>
<p>Aslında daha anlatılabilecek yüzden fazla çatı mevcut. Ama hepsine yer vermemiz mümkün değil. Bu yazıyı sadece yol gösterici kabul edip bize saygılarınızı sunmazsanız seviniriz <img src='http://erhanabay.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Tüm kütüphanelerle ilgili güncel bilgilere ajaxpatterns.org adresinden erişebilirsiniz. Önümüzdeki sayıdan itibaren seçeceğimiz bir çatı ile yazı dizimize devam edeceğiz.</p>
<blockquote><p><strong>AJAX Kaynakları</strong><br />
Takip edebileceğiniz bazı kaynaklar<br />
<a href="http://ajaxnedir.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/ajaxnedir.com?referer=');">ajaxnedir.com</a> â€“ AJAX ile ilgili Türkçe içerikli bir site<br />
<a href="http://ajaxpatterns.org" target="_blank" onclick="pageTracker._trackPageview('/outgoing/ajaxpatterns.org?referer=');">ajaxpatterns.org</a> â€“ AJAX çatılarının yanında faydalı bilgilere de yer verilmiş.<br />
<a href="http://ajaxian.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/ajaxian.com?referer=');">ajaxian.com</a> â€“ Son gelişmeleri takip edebileceğiniz bir günlük<br />
<a href="http://ajaxmatters.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/ajaxmatters.com?referer=');">ajaxmatters.com</a> â€“ AJAX hakkında geniş bir bilgi içeriğine sahip</p></blockquote>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=13&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/05/16/60lik-mi-70lik-mi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX&#8217;lanmış bir uygulama</title>
		<link>http://erhanabay.com/2007/05/16/ajaxlanmis-bir-uygulama/</link>
		<comments>http://erhanabay.com/2007/05/16/ajaxlanmis-bir-uygulama/#comments</comments>
		<pubDate>Tue, 15 May 2007 23:02:47 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/05/16/ajax%e2%80%99lanmis-bir-uygulama/</guid>
		<description><![CDATA[Geçen ay yaptığımız laf salatasının ardından icraat dönemine geçmiş bulunuyoruz, hepimize hayırlı uğurlu olsun. Bu ay şöyle basitinden bir uygulama ile öğrendiklerimizi pekiştirelim. Adım 1 â€“ Sunucuya isteğimizi gönderme Sunucuya isteğimizi gönderebilmek için istemci tarafında -tarayıcıda- çalışan bir dile ihtiyacımız olduğundan bahsetmiştik. Bunu gerçekleştirebilmek için XMLHTTP olarak bilinen ve Internet Explorer&#8217;da ActiveX nesnesi olarak bulunan [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://erhanabay.com/wp-content/uploads/2007/05/ajax-logo.jpg" title="ajax-logo.jpg"><img src="http://erhanabay.com/wp-content/uploads/2007/05/ajax-logo.jpg" title="ajax-logo.jpg" alt="ajax-logo.jpg" align="right" border="0" /></a><a href="/2007/05/16/bahar-kokulu-web-uygulamalari/">Geçen ay</a> yaptığımız laf salatasının ardından icraat dönemine geçmiş bulunuyoruz, hepimize hayırlı uğurlu olsun. Bu ay şöyle basitinden bir uygulama ile öğrendiklerimizi pekiştirelim.</p>
<p><span id="more-8"></span></p>
<p><strong>Adım 1 â€“ Sunucuya isteğimizi gönderme</strong><br />
Sunucuya isteğimizi gönderebilmek için istemci tarafında -tarayıcıda- çalışan bir dile ihtiyacımız olduğundan bahsetmiştik. Bunu gerçekleştirebilmek için XMLHTTP olarak bilinen ve Internet Explorer&#8217;da ActiveX nesnesi olarak bulunan bir sınıf kullanacağız. &#8216;Peki ya diğer tarayıcılar?&#8217; sorusunu merak edenlere de hemen cevap verelim: aynı sınıf XMLHttpRequest adıyla Mozilla, Safari ve Opera&#8217;da da kullanılabilmekte. Ve kodumuzun ilk ayrıntılarına geçiyoruz.</p>
<blockquote><p><em>if (window.XMLHttpRequest) { // Mozilla, Safari, &#8230;<br />
http_istegi = new XMLHttpRequest();<br />
} else if (window.ActiveXObject) { // IE<br />
http_istegi = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;)<br />
}</em></p></blockquote>
<p>Bazı Mozilla tarayıcıları sunucudan dönen bilgi XML üstbilgisini içermiyorsa hata verir. Eğer açık kaynağa saygılı gençlersek biz de Mozilla&#8217;ya saygı duyanlardanız demektir ve o yüzden de bu ayrıntıya dikkatlice yaklaşaraktan gerekli düzenlemeyi hemen yapmalıyız. Nesneyi kendi değişkenimize kopyaladıktan sonra sayfa üstbilgisini XML olarak değiştirelim.</p>
<blockquote><p><em>http_istegi = new XMLHttpRequest();<br />
http_istegi.overrideMimeType(&#8216;text/xml&#8217;);</em></p></blockquote>
<p>Bir sonraki aşama HTTP isteğini oluşturan nesnemize sunucudan gelen cevabı işleyecek JS fonksiyonunu söylemek. Bunu da kullanacağımız fonksiyonun adını nesnenin onreadystatechange özelliğine atayarak yapacağız.</p>
<blockquote><p><em>http_istegi.onreadystatechange = fonksiyonunAdi;</em></p></blockquote>
<p>Dikkat etmeniz gereken nokta fonksiyon adından sonra parantez kullanılmadığı ve hiçbir değiştirgen gönderilmediği. Bu söz diziminin yanı sıra işinizi biraz daha kolaylaştırabilecek olanı da şöyle kullanabilirsiniz:</p>
<blockquote><p><em>http_istegi.onreadystatechange = function(){<br />
// işi yapacak kodlar<br />
};</em></p></blockquote>
<p>Sunucu cevabının nasıl işleneceğini belirledikten sonra şimdi ise sıra gerçekten talepte bulunmada. HTTP isteği sınıfımızın <em>open()</em> ve <em>send()</em> metodları bu işimizi görecek.</p>
<blockquote><p><em>http_istegi.open(&#8216;GET&#8217;, &#8216;http://www.ornek.org/bir.dosya&#8217;, true);<br />
http_istegi.send(null);</em></p></blockquote>
<p>Gördüğünüz gibi <em>open()</em> metodundaki ilk değiştirgen <em>GET</em>. Sunucunuz tarafından desteklenen POST, HEAD, TRACE gibi diğer tüm metodlar da kullanılabilir. İkinci değiştirgen ise isteğimizi gönderdiğimiz sayfanın adresi. Güvenlik nedeniyle sadece kendi alan adınızdan sayfaları çağırabilirsiniz. Unutmamanız gereken nokta ise adresi yazarken iletişim kuralını yazmak (http://&#8230;). Üçüncü değiştirgen isteğimizin eşzamanlı olup olmadığını belirliyor. <em>True</em> olarak atanan değer AJAX kısaltmasının &#8216;A&#8217;sını oluşturuyor. Eşzamanlı olmayan bu taleple sunucudan yanıt beklenirken de JS fonksiyonu çalışmaya devam edecek.</p>
<p><em>send()</em> metodu sunucuya bilgileri göndermemizi sağlıyor. Eğer gönderim türü <em>GET </em>yerine <em>POST </em>olarak belirlenirse o zaman gönderilen veri sorgu dizisi şeklinde yazılmalı.</p>
<p align="center"><em>anahtar=deger&amp;digeranahtar=digerdeger</em></p>
<p>Ayrıca sayfa üstbilgisi de</p>
<blockquote><p><em>http_istegi.setRequestHeader(&#8216;Content-Type&#8217;, &#8216;application/x-www-form-urlencoded&#8217;);</em></p></blockquote>
<p>atanmalı. Aksi takdirde gönderdiğinizi düşündüğünüz veriler aslında gönderilmemiş olacak.</p>
<p><strong>Adım 2 â€“ Sunucudan gelen yanıtı işleme</strong><br />
İsteğimizi sunucuya sağ salim gönderdikten sonra sıra gelen veriyi düzgün bir biçimde ele almak. onreadystatechange özelliğine atadığımız fonksiyon içeriğini kabaca şöyle yazabiliriz:</p>
<blockquote><p><em>if (http_istegi.readyState == 4) {<br />
// yanıt alındı, herşey yolunda<br />
} else {<br />
// henüz hazır değil<br />
}</em></p></blockquote>
<p>Öncelikle isteğimizin durumunu gözden geçirelim. Eğer durum değeri 4 ise bu sunucudan yanıt dönüşünün tamamlandığı anlamına geldiğinden işimize devam edebiliriz demektir. Diğer durum değerleri de aşağıdaki gibi:</p>
<ul>
<li>0 (başlatılmadı)</li>
<li>1 (yükleniyor)</li>
<li>2 (yüklendi)</li>
<li>3 (etkileşimli)</li>
<li>4 (tamamlandı)</li>
</ul>
<p>Sıradaki kontrol ise HTTP sunucu yanıtının durum kodu. Sağlıklı bir yanıtta â€“ki bu bir internet sayfasını da görüntülediğinizde gönderilen- kod 200&#8242;dür.</p>
<blockquote><p><em>if (http_istegi.status == 200) {<br />
// mükemmel!<br />
} else {<br />
// istekle ilgili bir sorun var,<br />
// örneğin yanıt 404 (Sayfa bulunamadı)<br />
// ya da 500 (Sunucu hatası) kodlarına sahip olabilir<br />
}</em></p></blockquote>
<p>İsteği gönderdik, yanıtı aldık ve her şey yolundaysa veri elimize ulaştı. Şimdi elimizdeki veriye erişim için elimizde 2 seçenek var.</p>
<ul>
<li><em>http_istegi.responseText</em>, sunucu yanıtını metin dizisi olarak döndürür.</li>
<li><em>http_istegi.responseXML</em>, yanıtı XML biçiminde döndürerek DOM fonksiyonları ile işlenebilmesine olanak sağlar.</li>
</ul>
<p><strong>Adım 3 â€“ Örnek uygulama</strong><br />
Şu ana kadarki tüm kodları bir araya getirerek örneğimizi oluşturalım. Aşağıdaki kodlar test.html adlı sayfanın içeriğini ekrana getirecek.</p>
<p align="center"><img src="http://erhanabay.com/wp-content/uploads/2007/05/kod.png" alt="kod.png" /></p>
<p>Örnekte ziyaretçi &#8216;İstek yap&#8217; bağlantısına tıklayarak test.html değiştirgenine sahip istekYap() fonksiyonunu tetikler. Ardından istek alertContents() fonksiyonuna gönderilir. Bu fonksiyon da yanıtı kontrol eder ve sorunsuz bir yanıtta test.html içeriğini alert() fonksiyonuna aktarır. Ve böylece işlem tamamlanmış içerik ekranda görüntülenmiş olur.</p>
<p>Not: Örneği <a href="http://erhanabay.com/?attachment_id=9" target="_blank">buradan</a> kontrol edebilirsiniz.</p>
<p><em>Bu yazı Haziran 2006 tarihinde PC Tech dergisinde yayınlanmıştır.</em></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=8&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/05/16/ajaxlanmis-bir-uygulama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bahar kokulu web uygulamaları</title>
		<link>http://erhanabay.com/2007/05/16/bahar-kokulu-web-uygulamalari/</link>
		<comments>http://erhanabay.com/2007/05/16/bahar-kokulu-web-uygulamalari/#comments</comments>
		<pubDate>Tue, 15 May 2007 22:06:13 +0000</pubDate>
		<dc:creator>Erhan Abay</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://erhanabay.com/2007/05/16/bahar-kokulu-web-uygulamalari/</guid>
		<description><![CDATA[&#8216;Bu siteyi AJAX&#8217;lasak da mı yapsak, AJAX&#8217;lamasak da mı yapsak?&#8217;. Eğer bu tekerlemeyi hızlı bir şekilde söyleyebiliyorsanız siz olayı çözmüşsünüz, bu sayfada vakit kaybetmenize gerek yok, hemen bir sonraki konuya geçebilirsiniz. Nedir bu AJAX? Cruyff, Bergkamp, Davids, Kluivert, Laudrup kardeşler sizlere bir şeyler çağrıştırıyor mu? Bir zamanların fırtına takımı Ajax. Ya da beyazları daha beyaz, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://erhanabay.com/wp-content/uploads/2007/05/ajax-logo.jpg" title="ajax-logo.jpg"><img src="http://erhanabay.com/wp-content/uploads/2007/05/ajax-logo.jpg" title="ajax-logo.jpg" alt="ajax-logo.jpg" align="right" border="0" /></a>&#8216;Bu siteyi AJAX&#8217;lasak da mı yapsak, AJAX&#8217;lamasak da mı yapsak?&#8217;. Eğer bu tekerlemeyi hızlı bir şekilde söyleyebiliyorsanız siz olayı çözmüşsünüz, bu sayfada vakit kaybetmenize gerek yok, hemen bir sonraki konuya geçebilirsiniz.</p>
<p><span id="more-3"></span><br />
<strong>Nedir bu AJAX?</strong><br />
Cruyff, Bergkamp, Davids, Kluivert, Laudrup kardeşler sizlere bir şeyler çağrıştırıyor mu? Bir zamanların fırtına takımı Ajax. Ya da beyazları daha beyaz, renklileri daha renkli yapa yapa yakında bizi ışıltıdan kör edecek, olmadı renk körü edecek temizlik kimyasallarından Ajax&#8217;ı bilmeyeniniz var mı? Yok mu? O zaman site ustabaşılarının yeni sayfa yapım tekniği olan AJAX&#8217;ı kesin duymuşsunuzdur.</p>
<p>AJAX, ecnebicede &#8216;eyceks&#8217; diye okunan, açılımı &#8216;Asynchronous JavaScript And XML (Eşzamanlı Olmayan JavaScript ve XML)&#8217; olan ve Web 2.0 akımıyla beraber yayılmaya başlayan, etkileşimli web uygulamaları geliştirebileceğiniz bir teknik. Biz yazımızın geri kalanında &#8216;acaks&#8217; diye okuyacağız. <img src='http://erhanabay.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>AJAX ile geliştireceğiniz web uygulamalarının kullanıcı ile daha etkileşimli olmasının temelinde yatan ve onu klasikten ayıran etken sunucu ve istemci arasında daha küçük miktarda veri iletimi. Bağlantılara tıklanmak suretiyle sunucudan bulunulan isteklerde sayfanın tamamı yerine sadece bir kısmı güncelleniyor ve böylece sayfanın aynı kalan bölümleri gereksiz yere trafikte yer işgal etmiyor. Böylece sayfanızın hızı ve kullanışlılığı artıyor ve ziyaretçilerinize daha rahat bir sürüş keyfi yaratıyor.</p>
<p><strong>AJAX nelerden ibaret?</strong><br />
AJAX adı gibi JavaScript (JS) ve XML&#8217;in eşzamanlı olmayan paslaşmalarının bir karışımı (TabiÃ® ki HTML (ya da XHTML), CSS vazgeçilmez diğer unsurlar ama bunlar olmadan sayfanız da var olamayacağından anlatımlarda fazladan belirtme gereği duymayacağız). Burada JS bizim istemci tarafındaki veri işleme dilimiz, XML de sunucudan istemciye veri iletiminde kullanacağımız dosya biçimidir. Son cümlenin üzerinde biraz düşündüğünüzde aklınıza &#8216;O zaman bu sunucu-istemci iletişimde farklı dil ve dosya biçimi kullanılabiliyormuş.&#8217; gibi bir cümle gelebilir. Aslında evet. AJAX bir standart değil bir tekniktir. Her ne kadar adı bu şekilde konmuşsa da aynı işlevleri görebilecek farklı seçeneklere de sahipsiniz. Örneğin JS yerine JScript (ikisi farklı diller), XML yerine de HTML kullanılabilir. Genellersek de sunucudan gelen veriyi işleyebilmek için DOM (Document Object Model â€“ Döküman Nesne Modeli) erişimine sahip bir istemci taraflı dil ve sunucudan gelen verinin biçimi, konunun ana fikrini oluşturmakta.</p>
<p>Sürekli olarak sunucudan gelen veriden ve bu veriyi ne ile işleyeceğimizden bahsettik ama peki biz sunucuya ne istediğimizi nasıl söyleyeceğiz? Sonuçta yapmak istediğimiz sayfayı yenilemeden sunucuya istekte bulunup gelen veriyi de işleyerek sayfanın istediğimiz yerinde güncelleme ile görüntülemek. Sunucu ile eş zamanlı olmayan iletişim için taleplerimizi XMLHttpRequest nesnesi kullanarak gerçekleştireceğiz. Bu nesne şu anda piyasadaki bilinir tarayıcıların hepsinin son sürümlerinde desteklenmekte. Halen bazı AJAX çatıları tarafından kullanılmaya devam edilen sayfa içi çerçeve (IFRAME) ile de sayfa içeriğine müdahale yöntemleri de eskiden beri kullanılan â€“hatta AJAX&#8217;ın adının AJAX olmadığı zamanlardan :p- ve kabul gören yöntemlerden. IFRAME etiketi ile yüksekliği ve genişliği sıfır olan, yani görünmeyen, bir pencere içerisinden sayfa içeriği güncellenebilmekte. Bu da klasik web uygulamalarına biraz daha yakın bir yöntem olarak görülebilir.</p>
<p align="center"><img src="http://erhanabay.com/wp-content/uploads/2007/05/ajax1.jpg" alt="ajax1.jpg" /></p>
<p><strong>Çok yeni bir teknik mi?</strong><br />
Daha önce de söylediğimiz gibi, AJAX adı ile kendini her ne kadar kısıtlasa da benzer tekniklerin izlerine daha öncesinde internet aleminde rastlanıyordu. Yani AJAX sadece kullanım şeklini derleyip toparlayarak bu tekniğin adını koymuş oldu.</p>
<p><strong>Artıları, eksileri</strong><br />
Sunucu ile istemci arasında gönderilip alınan verinin nispeten çok daha az olması ve dolayısıyla da artan hızı nedeniyle sayfalarınızın çekiciliği artıyor. Mesela bir veri tablosunda sildiğiniz satır için tüm tablo yeniden yüklenmek yerine sadece o satır tablodan kayboluyor. Bu sizin de bütçenize yansıyor. Çünkü bu memnuniyeti maddi çıkarlarınız için kullanabildiğiniz gibi bant genişliği için ödediğiniz parada da hissedilir bir düşüşe, yani kara neden oluyor.</p>
<p>Eksileri ise aşağı yukarı tamamen teknik nedenlerden kaynaklanıyor. En önemli sorun, istemci taraflı yanının ciddi bir yüzdeye sahip olmasından dolayı tarayıcı çeşitliliğine uyum sürecinin size kodlamada vakit ve çaba olarak geri dönmesidir. Bu aslında HTML ve CSS ile süregelen ortak bir sorun olmasına rağmen görselliğin biraz daha öne çıktığı AJAX uygulamalarında JS&#8217;nin de eklenmesiyle beraber artarak devam ediyor. Eğer ziyaretçileriniz AJAX desteği olmayan modellerdense onları gözden çıkarmak ya da onlara özel bir de AJAX&#8217;ı olmayan site yapmak zorundasınız. Yani olmak ya da olmamak gibi yapmak ya da yapmamak iki taraftan da size belli bir bedele mal oluyor.</p>
<p><strong>Sonuç</strong><br />
İstediğiniz kadar kaçın, sonunda yüzleşmeniz gereken bir gerçek olan AJAX&#8217;ı öğrenmek zorundasınız! TabiÃ® ki bu lafımız kendini site ustabaşı (ecnebice: webmaster) olarak tanımlayanlara. Bakın Google&#8217;ın yaptıklarına; GMail, Google Map. Aklın yolu bir.</p>
<p align="center"> <img src="http://erhanabay.com/wp-content/uploads/2007/05/ajax2.jpg" alt="ajax2.jpg" /></p>
<p>PC Tech size bu süreçte yardımcı olacak yazı dizisine bu yazıyla beraber başlamış oldu. Giriş niteliğindeki bilgilendirmenin ardından uygulama safhalarına bir sonraki sayı ile devam edeceğiz. Kalın sağlıcakla.</p>
<blockquote><p><strong> AJAX desteği olan tarayıcılar</strong><br />
* Microsoft Internet Explorer 5.0 ve üstü (Mac OS sürümleri desteklenmiyor)<br />
* Gecko tabanlı tarayıcılar (Mozilla, Mozilla Firefox, SeaMonkey, Camino, Flock, Epiphany, Galeon ve Netscape 7.1 ve üzeri)<br />
* KHTML API 3.2 ve üzeri kullanan tarayıcılar (Konqueror 3.2 ve üstü, Apple Safari 1.2 ve üzeri<br />
* Opera 8.0 ve üzeri (Opera Mobile Browser 8.0 ve üzeri dahil)</p>
<p><strong>AJAX desteklemeyen tarayıcılar</strong><br />
* Opera 7 ve altı<br />
* Microsoft Internet Explorer 5.0 ve altı<br />
* Metin tabanlı tarayıcılar (Lynx, Links gibi)<br />
* Görme engeli olanlar için tasarlanmış tarayıcılar<br />
* 1997 yılından önce geliştirilen tarayıcılar</p></blockquote>
<p><em>Bu yazı Mayıs 2006 tarihinde PC Tech dergisinde yayınlanmıştır.</em></p>
<img src="http://erhanabay.com/?ak_action=api_record_view&id=3&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://erhanabay.com/2007/05/16/bahar-kokulu-web-uygulamalari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
