anov
Çokca bahsedeceksiniz :-)

Ajax? Remote Scripting? (ceviz.net)

December 9, 2007 12:05 by anov

Not: Bu yazı şu anda ceviz.net ana sayfasında  http://www.ceviz.net/ajax-remote-scripting_a1095.html  adresinde de yayınlanmaktadır.

Bu günkü yazımızda size remote scripting i anlatmayı planlıyorum, remote scripting, bir html sayfasının yeniden yüklenmesine gerek kalmadan yayınlandığı sunucu ile (evet sadece yayınlandığı sunucu ile, bu kısıtlama güvenlik sebebiyle konulmuştur, ama aşılabilir.) iletişimini sağlayan kodlama kalıplarıdır.

Google ajax ın reklamını yapmadan çok önce de ajax denilen şey remote scripting adı altında yapılıyordu, ama ne zaman ajax meydana çıktı javascript in yıldızı parladı, sinir bozucu java - javascript ayırt edememezliğinin yanına bir de ajax ile dhtml ayırt edememezliği çıktı.

Bildiğim kadarıyla size remote scripting in (rs, ajax ı kapsar bu yüzden ondan bahsedeceğim) tarihçesini kendi bakış açımdan anlatayım:

  • Remote scripting ile ilk tanışmam www.yazgelistir.com dan bir arkadaşın sadece ie 5.5+ da geçerli olan <xml> elementiyle sunucu ile iletişim kurmasıyla başlar. (Şu an o site üzerindeki aramalarım ne yazık ki bir sonuç vermedi, yazıyı yazanın ismini burada anmayı ve yazıya link vermeyi çok isterdim rastlayan biri varsa veya o yazının yazarı şu an bunu okuyorsa bana bildirebilir, o yazı zamanının çok ilerisinde bir yazı idi çünkü) **Ekleme : Yazı sayın Turgut Haspolat tarafından yazılmış.**
  • O tarihlerde .net 1.0 dan 1.1 e yeni yeni geçiyordu, asp.net sayfalarında SmartNavigation diye bir özellik vardı peki ne yapardı bu SmartNavigation? kendine özgü bir js kodu ile sayfanın içinde bir IFRAME elementi oluşturur ve sayfanın içine ekler, request i o iframe içinden yapar ve dönen yanıtı (IFRAME elementinin outerHTML özelliği) o IFRAME i içeren sayfaya (normal sayfamız) yansıtırdı, böylece sayfanın postback işlemi anlaşılmazdı. Ama bu özellik sadece IE ailesiyle çalışıyor, çünkü outerHTML standart bir özellik değil.
  • Microsoft.XMLHTTP ve Msxml2.XMLHTTP2 vardı ama tüm tarayıcılarla çalışmadığı için popüler değildi. Açıkcası Mozilla, Mozilla Firefox olana kadar bu nesnelerden haberi olan kişi sayısı az idi.
  • Sanıyorum XmlHttpRequest nesnesine ilk desteğini veren tarayıcı Safari idi, yanılıyorsam düzeltin ama onunla ilgili ilk dökümanlara apple sitesinde rastlamıştım.
  • Firefox 1 in yaygınlaşması ve google ın gmail hizmetinde bu nesneleri kademeli olarak kullanması ayrıca "google suggest" adını verdiği daha aradığımız şeyi arama kutusuna yazarken sonuçların "ajax" ile sorgulanması ve hemen metin kutusunun altındaki bir (layer, div) içinde gösterilmesi söz konusuydu. Eh google bunu javascript (hem de anlaşılmaz yapmaya çalıştıkları bir javascript) ile yapınca herkes bunu merak edip sağda-solda bloglarda decode edebildiği ve mantığını anlatabildiği kadarını, yayınlamaya başladı.
  • Sonra şu kalıp (ki sanırım çoğu ajax kütüphanesinin temel kalıplarından biridir.)  http://jibbering.com/2002/4/xmlhttp.js
  • Daha çok php programcılarının kullandığına şahit olduğum sajax, xajax gibi kütüphaneler.

  • Atlas ın geliştirilmesine başlandı (şimdiki adıyla asp.net ajax)
  • Anthem ile tanıştık. ajaxpro, anthem gibi üçüncü parti kütüphaneler (ki anthem kendi içinde dosya upload ederken iframe kullanmaktadır) gördük.
Gerek cevizde gerekse diğer yerli ve yabancı sitelerde çokca rastladığım bir hataya, ajax ile javascript ayrımınının yapılamamasına karşılık, şimdi bir çizgi çizmek gereklidir diye düşünüyorum bu çizgi ajax denilen şeyin sadece sunucudan veri alınan durumlar için geçerli olduğunu savunduğumdur. Gelin örnek iskelet kod üzerinde birlikte inceleme yapalım.

Örnek iskelet kod olarak şunu kullanacağım : http://forum.ceviz.net/showthread.php?t=17334

Üye olmayanlar kodu şuradan indirebilirler (aslına sadık kalmak için içindeki saçma sapan açıklamaları silmiyorum)
http://www.ceviz.net/ceviz_main/uploads/uye7346/xmlhttp.zip

var xmlhttp = new_xmlhttp();/**alacaklı haciz koymuş bekire of offf*/

Bu kod xmlhttp nesnesini kurar. Nesne öncelikle Msxml2.xmlhttp ve microsoft.xmlhttp nesnelerine kurulmaya çalışır, eğer kullanıcı ie çalışmıyorsa bu kısımları atlayıp en sondaki XMLHttpRequest oluşturulup bu nesneye atanacaktır.

xmlhttp.open("POST","post.asp",true);

Geriye hangi nesne dönerse dönsün bu nesnelerin gerçekleştirdiği arayüz aynıdır. Aynı metot ve özelliklere sahiptirler. Bu satırda kullandığımız metot, "open" ve ilk parametresinde o nesne vasıtasıyla çağıracağımız dosyayı hangi fiil ile çağıracağımızı belirtiyoruz. Bu örnekte POST kullandık, asp de POST un karşılığı post ile gönderilen verilerin alış şekli Request.Form ile olmaktadır, eğer GET kullansaydık, Request.QueryString ile alacaktık. İkinci parametre yanıt döndürecek olan sayfanın ismidir.

Üçüncü parametre bu nesneyi kullanış biçimimizin asenkron (eş zamanlı olmayan) olup olmayacağını belirler. Ne işe yarar eşzamanlılık? Eş zamanlı olmayan kod, bir çeşit thread gibi, değişik bir kapsamda çalışır ve event tetikler (işini bitirdiği zaman) ama eş zamanlı kod, yanıt döndürene kadar scriptin çalışmasını bekletir ve scriptin donmuş hissi vermesine yol açar.

(Asynchronous javascript and xml) deki A harfine karşılık gelir, anlayacağınız ajax ın a sıdır :-)

Neyse konuya dönelim, aradaki iki satırı atlayıp dikkatinizi

xmlhttp.onreadystatechange

Satırına çekmek istiyorum bu bir olay tutacağımı desem olay yönetici mi desem, ingilizcede "event handler" denilen nesnedir işte. Asenkron olan xmlhttprequest nesnesi her durum değiştirdiğinde (siz onu yolladıktan sonra dökümandan dönen yanıta göre status bayrağı değişir. 200 kodu OK anlamında olduğundan yanıtın döndüğünü anlayıp, işlemlerimizi yapıyoruz.

Kaynakça :


Currently rated 4.8 by 6 people

  • Currently 4.833333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Add comment


 

biuquote
  • Comment
  • Preview
Loading