AJAX & JSON Mustafa Ahmet KARA
Ajaxed kütüphanesi bakıldığında klasik ASP içindeki herhangi bir metodun client tarafından çağrılmasını sağlar. Bunu yapabilmesi için klasik ASP yazımınızı biraz değiştirmeniz gerekecektir ama AJAX söz konusu olduğunda çok güzel sonuçlar verir.
Daha derine inmek gerekirse ajaxed sunucu tarafındaki VBScript kodunu istemciden çağırmanızı sağlar. Örnek vermek gerekirse client tarafındaki bir button’un onclick event’ini sunucu tarafındaki bir metoda bağlayabilirsiniz. Temelde sunucu tarafında bir metod çağırır ve sonucunu javascripte geri döndürür.
En güzel özelliklerinden biri de içinde Prototype.js i otomatik olarak barındırır ve bir önceki sayfada bahis konusu ettiğim JSON ASP 1.3 kütüphanesinide barındırır. Tüm bunlar arasındaki tümleşiklik oldukça iyidir, ama istemci tarafında işlemler için Prototype.js kullandığı için bu kütüphaneyi oldukça iyi bilmeniz gerekmektedir. Prototype kütüphanesi hakkında bilgi almak için Orhanın hazırladığı kapsamlı derslere bakabilirsiniz. http://ajax-tr.com/prototypejs-klavuzu-1/ ise ilk dersin adresidir.
Ajaxed kütüphanesi AJAX için yapılmış gözüksede içinde AjaxedPage, Database, JSON, Library, StringOperations isimlerinde ek yardımcı sınıf tanımlarını barındırır.
- AjaxedPage sınıfı sayfanıza AJAX desteği eklemenizi sağlar ve kendi içinde ASP.NET te olduğu gibi PostBack kontrolleri ile ilk yükleme, tekrar yüklemeleri ayırt etmenize izin verir.
- Database statik sınıfı adındanda anlaşılacağı üzere veritabanı işlemlerinin direkt olarak yapılabilmesini sağlar. Oldukça yeterli bir sınıftır, kendi database.asp’nizi unutabilirsiniz.
- JSON sınıfı ise bir önceki sayfada bahsettiğim JSON fonksiyonlarını barındırır.
- Library ve StringOperations GUID üretme, URL Decode gibi çeşitli fonksiyonlar ile, string değişkenler üzerinde oldukça fazla sayıda işlem yapabilmenizi sağlayan sınıflardır.
Tüm özelliklerinden bahsetmeyeceğim ama ilgilenen arkadaşlar ek dosyalar kısmından kodları ve dokümanları indirebilirler. Şimdi ajaxed kütüphanesi ile bir iki örnek yapalım.
Aşağıda browser üzerinden kullanıcının iki sayı girmesini sağlayan ve sonuç olarakta bunların toplamını gösteren sayfanın kodu görülebilir.
-
<!--#include virtual="/ajaxed/ajaxed.asp"-->
-
<%
-
set page = new AjaxedPage
-
page.draw()
-
sub callback(action)
-
if action = "topla" then page.return(topla(page.RF("a"), page.RF("b")))
-
end sub
-
-
function topla(a, b)
-
if not isnumeric(a) then a = 0
-
if not isnumeric(b) then b = 0
-
topla= cint(a) + cint(b)
-
end function
-
-
sub main() %>
-
-
<script>
-
function toplandi(toplam) {
-
$('c').value = toplam;
-
}
-
</script>
-
-
<form id="frm">
-
<input type="Text" name="a" id="a">+
-
<input type="Text" name="b" id="b">=
-
<input type="Text" name="c" id="c">
-
<button onclick="ajaxed.callback('topla', toplandi)" type="button">topla</button>
-
</form>
-
<% end sub %>
Sayfanın yapısını incelediğimize ajaxed kütüphanesinin kullanımı için yapılması gerekenler ortaya çıkıyor.
- ajaxed.asp sayfasını include ile sayfaya bağlıyoruz.
- AjaxedPage nesnesi oluşturuyoruz ve draw() metodunu çağırıyoruz.
-
init() metodu her çağrıda çağrılır.
main() metodu sadece ilk yüklemede çalışır.
callback() metodu ise sadece AJAX çağrılarında çalışır.
Kodu incelediğimizde asıl sihirin ajaxed.callback('topla', toplandi) ile olduğunu anlayabilirsiniz. Button’a tıklanınca ajaxed sunucuda callback metodu aracılığı ile topla metodunu çağırır ve sonucu istemci tarafında toplandi fonksiyonuna gönderir.
Ajaxed kütüphanesi hakkında bahsedeceklerim bu kadar ama yazımı bitirmeden daha güzel bir örnek verelim. Veritabanından kayıt çekerek bunu bir seçim listesi içine AJAX ile dolduralım. Bu ASP sayfası ise aşağıdaki gibidir:
-
<!--#include virtual="/ajaxed/ajaxed.asp"-->
-
<%
-
set page = new AjaxedPage
-
page.draw()
-
sub callback(action)
-
if action = "get" then page.return(getRecordset("SELECT id, adi + ' ' + soyadi as tamadi FROM person_data"))
-
end sub
-
-
sub main() %>
-
-
<script>
-
function got(recs) {
-
for (i = 0; i <recs.length; i++) {
-
var o = new Option(recs[i].tamadi, recs[i].id, false, false)
-
$('dd').options[$('dd').options.length] = o;
-
}
-
}
-
</script>
-
-
<form id="frm">
-
<select id="dd"></select>
-
<button onclick="ajaxed.callback('get', got)" type="button">yükle</button>
-
</form>
-
-
<% end sub %>
Ajaxed kütüphanesinin adresi ise http://www.webdevbros.net/ajaxed/ dir.
Bu akşam sizlere ASP içerisinden AJAX’ı kullanmayı inanılmaz derecede kolaylaştıran ajaxed ve JSON ASP kütüphanelerinden bahsettim. Bir sonraki yazım ActionScript ile JSON kullanımı olacaktır. Tekrar iyi akşamlar, bir sonraki yazımda görüşmek üzere.
Ek Dosyalar
Ajaxed kütüphanesini indirmek için tıklayınız.
Toplamda 5699 kez okunmuş.
Şu an 1 kişi okuyor.
En fazla 5 kişi aynı anda okumuş.
Bugün 27 kez okunmuş.
Etiketler: ajaj, ajax, ajaxed, asp, json, json for asp
Trackback Yorumları takip et Baskı Önizleme

(14 oy, ortalama 4.14)
# Acemi Ajax'ci | 17 Eylül 2007, 16:35
Merhaba,
Aşağıdaki resimde nasıl bir sayfa hazırladığımı anlatmaya çalıştım. Şimdi bu sayfadaki açılır menüden isim seçip göster butonuna tıkladığımda alttaki çerçeveli bölümün değişmesini istiyorum. Bu bilginin veritabanından çekildiğini belirtmem gerek.
http://img516.imageshack.us/img516/863/sorups0.gif
Mootools ile form tetikleniyor ve alttaki çerçevede seçilen isme ait bilgiler dökülüyor. Kişinin fotoğrafı dahil. Tabi o bölgede aslında bir sayfa veya tablo yok. İçi boş bir div element var ve istenen bilgi orada çıkıyor. Asp ile formdaki action kısmına:
sayfa_adi.asp?kisiID=
yazıyorum ama kaç farklı yol denesem dahi seçtiğim id’ye ait bilgi gelmiyor. Yani daima ilk id’de çakılıp kalıyor. Alt taraftaki div kısmında loading resmi çıkıyor ama yine de bilgi değişmiyor. Bu işin yolu json’mudur? Öyleyse, mootools ile nasıl bir kod düzeni kurmam gerekiyor? Şimdiden teşekkürler…
# mustafa_kara | 21 Eylül 2007, 21:32
Merhabalar,
JSON bunun çözümü değil ama sorun başka bir sebepten oluşuyor. İki türlü olasılık var
1. Ya div’in idlerinde ilk seçtiğin kişi bilgileri eklendiğinde bir değişiklik oluyor.
2. Yada sonucu browser cache’sine alıyor. Dolayısıyla her cağrıda aynı sonucu getiriyor. Bunu aşmak için adresinin sonuna random bir sayı ekleyebilirsin. yani adresin http://www.test.com?sayfa_adi.asp?kisiID= şeklinde ise
var url= “sayfa_adi.asp?kisiID=” + selKisiId + “&Rnd=”+Math.random();
şeklinde değiştirmen.
Ama en doğru çözümü sayfanı görerek söyleyebilirim.
# turunc4u | 28 Eylül 2007, 11:08
http://www.saurdo.com/11/09/ajax-e-mail-submitter-release
Asp ve ajax hakkında o kadar az kaynak var ki, burdaki örneğin asp ile uyumlusunu nasıl yapabiliriz?
# mustafa_kara | 29 Eylül 2007, 11:46
Baksettiğin örneği aspye çevirmek çok basit aslında değişmesi gereken 2 adet dosya var
1. email/email.js içinde write.php metinini write.asp olarak değiştirmek.
2. email/write.php dosyasını write.asp olarak değiştir ve içeriğini şu şekilde ayarla
< %
function WriteToFile(FileName, Contents, Append)
on error resume next
if Append = true then
iMode = 8
else
iMode = 2
end if
set oFs = server.createobject("Scripting.FileSystemObject")
set oTextFile = oFs.OpenTextFile(FileName, iMode, True)
oTextFile.Write Contents
oTextFile.Close
set oTextFile = nothing
set oFS = nothing
end function
WriteToFile("file.txt",","+Request.QueryString("var"),True)
%>
# turunc4u | 01 Ekim 2007, 13:43
Teşekkürler. Janberka’da aynı örneği aspye çevirmiş. Bende siteme koydum