2
Ocak
2010

Basit Bir AJAX Hesap Makinesi

Geçen hafta PHP kursunda amacımızı biraz aşıp, istemci taraflı kütüphanelere daldık. AJAX’ın ne olduğu, neden AJAX’a ihtiyaç duyduğu, kısa bir tarihçesi gibi konular üzerinde durduktan sonra, popüler kütüphanelerden jQuery yardımı ile, AJAX yöntemini kullanan bir hesap makinesi yazdık.

Amacı ne, PHP’ye ne gerek var, JavaScript zaten toplama çıkarma yapabiliyor diyecek olursanız, sonuna kadar haklısınız. Bu programcıkta amaç, AJAX’ı basit bir şekilde örneklemek, öğrenebilmek, anlayabilmek…

…diyor ve sizi kodlarla baş başa bırakıyorum.

Eğer kodları indirmeden incelemek isterseniz, yazının devamına bakabilirsiniz.

bizimkodlar.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$(document).ready(function() { 
/* Buranın içindeki kodlar, sayfa yüklenmesi tamamlanınca çalışacak. Genel geçer olarak,
jQuery kodları bu blok içine yazılır. */
   var sayac = 0; /* Değişken tanımlama. */
 
   /* Bir "event". makine id'li form submit olunca aşağıdaki kod parçası çalışır. Daha ayrıntılı bilgi için
   jQuery dokümantasyonundan selector ve events konularına bakınız.*/
   $("#makine").submit(function() {
 
      $.ajax({ /* jQuery kütüphanesinin sunduğu cross-browser ajax metodu */
         type: "POST", /* http veri aktarım metodu */
         url: "hesap.php", /* isteğin yapılacağı adres */
         cache: false, /* sorgu tarayıcı önbelleğine alınabilir mi? */
         data: $(this).serialize(), 
         /* gönderilecek veri. this.serialize ile, submit edilen formun içindeki tüm bilgiler gönderilmektedir. */
         dataType: "json", /* dönüş için beklenen veri tipi */
         error: function(request) { /* isteğin yapılamaması sonucu gerçekleşecek kod parçası */
            alert("Hata oluştu."); /* ekrana mesaj kutusu çıkartır. */
         },
         success: function(request) { /* isteğin başarılı olması sonucu gerçekleşecek kod parçası */
            if(!request.hatali) {
               sayac++;
               $('#sonuc').append(sayac + " numaralı islemin sonucu: " + request.sonuc + "<br />"); 
               /* json ile gelen verilere dizi elemanıymış gibi erişilebilir.  */
            } else {
               alert("Sonuc hatalı. Gelen mesaj: " + request.hata);
            }
         }      
      });
      return false; /* varsayılan submit olayının olmasını (formun normal yöntemlerle gönderilmesini) engeller. */
      /* AJAX ASENKRONDUR. KOD PARÇASININ BU SATIRINA GELMESİ İÇİN AJAX SORGUSUNUN BİTMESİ
      GEREKMEMEKTEDİR. */
   });   
});

index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php 
   /* AJAX 101 - http://www.ubenzer.com/ */
   header("Content-Type: text/html; charset=utf-8"); 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="tr-TR">
<head profile="http://gmpg.org/xfn/1">
   <!-- EgeBK PHP Kursu Örnek Kaynak Kodları -->
   <title>AJAX Hesap Makinesi</title>
   <!-- jQuery Kütüphanesini Ekleyelim. Dikkat edin bu bir JavaScript kütüphanesi ve istemci tarafında çalışmak
   üzere tarayıcıya gönderiliyor. Yani kodlar halka açık. -->
   <script type="text/javascript" src="jquery.js"></script>
 
   <!-- jQuery kütüphanesini kullanarak işlem yapacağımız kod parçaları. JacaScript dosyalarının
   eklenme sırası önemlidir. -->
   <script type="text/javascript" src="bizimkodlar.js"></script>
 
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <meta http-equiv="author" content="Umut Benzer" />
</head>
<body>
<form action="hesap.php" id="makine" method="post"><!-- FORM ID'SİNE DİKKAT EDİNİZ -->
   1. Değer: <input type="text" name="deger1" /><br />
   2. Değer: <input type="text" name="deger2" /><br />
   <select name="islem">
      <option>Topla</option>
      <option>Cikar</option>
      <option>Carp</option>
      <option>Bol</option>
   </select>
   <input type="submit" value="AJAX'la Hesapla" />
</form>
<div id="sonuc">Sonuç burada görünecek.<br /></div><!-- DİV İD'SİNE DİKKAT EDİNİZ. -->
</body>

hesap.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
// echo var_dump($_REQUEST);
header("Content-Type: application/json; charset=utf-8");
 
if (!(isset($_REQUEST['islem']) && 
      ($_REQUEST['islem'] == "Topla" || $_REQUEST['islem'] == "Cikar" || 
       $_REQUEST['islem'] == "Carp" || $_REQUEST['islem'] == "Bol"))) {
   hataVer(); /* Hata mesajı yaz ve çık */
}
$islem = $_REQUEST['islem']; /* Bu noktadan sonra $islem'e güvenilir. */
 
/* Birinci sayı atanmış ve sayısal bir değer mi? */
if (!(isset($_REQUEST['deger1']) && is_numeric($_REQUEST['deger1']))) {
   hataVer(); /* Hata mesajı yaz ve çık */
}
$deger1 = $_REQUEST['deger1'];
 
/* İkinci sayı atanmış ve sayısal bir değer mi? */
if (!(isset($_REQUEST['deger2']) && is_numeric($_REQUEST['deger2']))) {
   hataVer(); /* Hata mesajı yaz ve çık */
}
$deger2 = $_REQUEST['deger2'];
 
if($islem == "Topla") {
   $sonuc = $deger1 + $deger2;
} elseif ($islem == "Carp") {
   $sonuc = $deger1  * $deger2;
} elseif ($islem == "Cikar") {
   $sonuc =  $deger1 - $deger2;
} else {
   if($deger2 == 0) {
      hataVer("Sıfıra bölüyorsunuz.");
   }
   $sonuc =  $deger1  / $deger2;
}
 
echo json_encode(array("sonuc" => $sonuc, "hatali" => false));
/* json_encode fonksiyonunun içindeki array'in key'lerine ve bizimkod.js dosyasına
(istemci tarafta) kullanılan json verisine erişilirken kullanılan key'lere dikkat edin. */
 
function hataVer($mesaj = null) {
   if (is_null($mesaj)) $mesaj = "Hatali bir veri var! Siz kimi kandiriyorsunuz?";
   die(json_encode(array("hata" => $mesaj,"hatali" => true)));
 
   /* Die, bir mesaj vererek programın çalışmasını durdurur. */
}
bu yazı 2.158 defa okundu

Site hoşunuza gitti mi? Belki arkadaşlarınızın da gider.

İstekli

Aaa Reklam

+ Yorumunuzu Ekleyin 4 yorum

  • etem 18 Ocak 2010 14.48

    güzelmiş teşekkürler.

  • Yakup Gövler 24 Nisan 2010 10.38

    Güzel bir uygulama olmuş. Teşekkürler.

  • Ufuk 23 Ocak 2011 13.56

    Öncelikle Merhaba ,
    Yaptığın Uygulama güzel . fakat php sayfasındaki header yollamak hani php sayfasının app type = app/json demişsin ya onu kaldırınca undefined diyor . sanırsam data : "json" olduğu için alınan sayfanın json olması gerekiyor neyse.

    birde karakter sorunu var. nasıl çözebilirim . ?

    • Umut 23 Ocak 2011 19.46

      Eğer bahsettiğiniz satır hesap.php'nin 3.satırıysa:

      O satırın orada olmasının bir amacı var. Bu yüzden kaldırınca hata vermesi normaldir. Satır, aktarılacak verinin json tipinde olduğunu ve UTF-8 karakter kodlaması ile aktarılacağını belirtir. Kaldırdığınızda veri tipi ve karakter kodlaması ile ilgili sorun yaşarsınız.

      Satırı geri eklerseniz problem çözülür.

Yorumunuzu Bırakın

Bu yazıya gönderilen yeni yorumları e-posta aracılığıyla bana bildir
Yeni gönderilenleri yorum yapmadan takip etmek için tıklayınız.

Yorumunuz başarıyla alındı. Onaylandıktan sonra yayımlanacaktır. Teşekkürler.

Twitler yükleniyor... 5 saniye sonra

Bıdı bıdı bıdı bıdı dıdı dıdı dudu dudu hıdı hıdı hödü hödü yüklüyoruz öhüm öhüm bıdı bıdı vs vs... 6 nanosaniye önce

Yüklenmenin geç olmasının sebebi ben değilim, Twitter API'sinin yavaş olması. Gudu gudu hıdı hödö büdü büdü... 25697 asır önce

Ha tabi bunları okumuşsan, bu sitenin çok gizli bir özelliğini bulmuşsun demektir. ;) Tebrikler. Bu "sürpiz yumurta"yı bulduğunu bana da haber verir misin? Tıkla! 6 dinazor önce

Geçen Yıllarda Bu Hafta

2011

Bunun Burada Ne İşi Var?

Bunun Burada Ne İşi Var?

Dün şehre inmek için Sayın Menderes Türel’in zamanında Hafif Metro ...

Windows 7’de Bilgisayarınızın Aldığı Puanı Değiştirin

Windows 7’de Bilgisayarınızın Aldığı Puanı Değiştirin

Biliyorsunuz Microsoft, Windows Vista’dan bu yana bilgisayarlar için bir performans ...

Dördüncü Sınıfın Birinci Döneminden Öğrenci Görüşleri

Dördüncü Sınıfın Birinci Döneminden Öğrenci Görüşleri

Dördüncü sınıfın yarısı bitti. Okuldan mezun olmak üzereyim. İyisiyle kötüsüyle bir ...

UBenzer’den Alın!

UBenzer’den Alın!

Ablam evdeki kullanılmayanları ayırmış, “Umut bunları sat.” dedi. Hazır elime ...

2009

Kısık Işık

Kısık Işık

Tavana asılmış tek beyaz floresan lambayı sevemedim bir türlü… “Ben ...

Antalya Toplu Taşıma Sisteminin Sorunları - 1

Antalya Toplu Taşıma Sisteminin Sorunları - 1

Antalya’da ulaşım bir ölüm. Trafik sıkışıklığı, haftada bir yönü değişen ...

2008

14 Şubat

14 Şubat

Biliyorsun bugün 14 Şubat. Daha iki gün öncesinden hazırdı zaten ...

Uyumadan Önce Son Boşluk

Uyumadan Önce Son Boşluk

Uykuya dalmadan önce düşünürüm… Kötü alışkanlıklarımdan biridir. Aklıma ne gelirse ......

NES Emulatörleri

NES Emulatörleri

Daha önceki şu iki yazımda (1.si, 2.si), çocukken bolca oynadığımız ...

Son Yorumlar