JSON ve ASP

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.

PHP:
  1. <!--#include virtual="/ajaxed/ajaxed.asp"-->
  2. <%
  3. set page = new AjaxedPage
  4. page.draw()
  5. sub init() : end sub
  6. sub callback(action)
  7.     if action = "topla" then page.return(topla(page.RF("a"), page.RF("b")))
  8. end sub
  9.  
  10. function topla(a, b)
  11.     if not isnumeric(a) then a = 0
  12.     if not isnumeric(b) then b = 0
  13.     topla= cint(a) + cint(b)
  14. end function
  15.  
  16. sub main() %>
  17.  
  18.     <script>
  19.         function toplandi(toplam) {
  20.             $('c').value = toplam;
  21.         }
  22.     </script>
  23.  
  24.     <form id="frm">
  25.         <input type="Text" name="a" id="a">+
  26.         <input type="Text" name="b" id="b">=
  27.         <input type="Text" name="c" id="c">
  28.         <button onclick="ajaxed.callback('topla', toplandi)" type="button">topla</button>
  29.     </form>
  30. <% end sub %>

Sayfanın yapısını incelediğimize ajaxed kütüphanesinin kullanımı için yapılması gerekenler ortaya çıkıyor.

  1. ajaxed.asp sayfasını include ile sayfaya bağlıyoruz.
  2. AjaxedPage nesnesi oluşturuyoruz ve draw() metodunu çağırıyoruz.
  3. 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:

PHP:
  1. <!--#include virtual="/ajaxed/ajaxed.asp"-->
  2. <%
  3. set page = new AjaxedPage
  4. page.draw()
  5. sub init() : end sub
  6. sub callback(action)
  7.     if action = "get" then page.return(getRecordset("SELECT id, adi + ' ' + soyadi as tamadi  FROM person_data"))
  8. end sub
  9.  
  10. sub main() %>
  11.  
  12.     <script>
  13.         function got(recs) {
  14.             for (i = 0; i <recs.length; i++) {
  15.                 var o = new Option(recs[i].tamadi, recs[i].id, false, false)
  16.                 $('dd').options[$('dd').options.length] = o;
  17.             }
  18.         }
  19.     </script>
  20.  
  21.     <form id="frm">
  22.         <select id="dd"></select>
  23.         <button onclick="ajaxed.callback('get', got)" type="button">yükle</button>
  24.     </form>
  25.    
  26. <% 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.

Sayfalar: 1 2 3

Toplamda 5699 kez okunmuş.
Şu an 1 kişi okuyor.
En fazla 5 kişi aynı anda okumuş.
Bugün 27 kez okunmuş.

Etiketler:

1 oy2 oy3 oy4 oy5 oy (14 oy, ortalama 4.14) Oylanıyor ... Oylanıyor ...

  1. PHP ve Yerleşik DOM Sınıfları
  2. Sağlamlığı Kanıtlanmış Tekniklerle Web 2.0 AJAX
  3. Same Origin Policy ( Aynı Kaynak Politikası)

Trackback Yorumları takip et Baskı Önizleme

5 yorum var

  1. # Acemi Ajax'ci | 17 Eylül 2007, 16:35 Gravatar

    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…

  2. # mustafa_kara | 21 Eylül 2007, 21:32 Gravatar

    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.

  3. # turunc4u | 28 Eylül 2007, 11:08 Gravatar

    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?

  4. # mustafa_kara | 29 Eylül 2007, 11:46 Gravatar

    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)
    %>

  5. # turunc4u | 01 Ekim 2007, 13:43 Gravatar

    Teşekkürler. Janberka’da aynı örneği aspye çevirmiş. Bende siteme koydum :)

Yorum yazın

sayfa sayacı