Ajax ile POST Methoduyla Veri Yollamak
Eğer okuduysanız bir önceki yazımda bu günlerde mutlaka insanlara yararlı bir şey yapıcam demiştim
ve ajax ile aramda 1-2 küçük kırgınlık dışında bir şey kalmadığını söylemiştim sonunda o kırgınlıkları da hallettim
Şimdi de sizlerle paylaşacağım! Bu yazımızda basit bir haber ekleme ekranı yapacağız sizinle tabii ki ajax desteği de olacak!
Veritabanı Oluşturmak
İilk olarak verilerimizi depolayacağımız veritabanını oluşturalım isterseniz.
PhpMyAdmin veya vt yönetmek için hangi yazılımı kullanıyorsanız ona girin ve istediğiniz ada sahip bir veritabanı oluşturun. Daha sonra aşağıda verdiğim sql sorgusunu çalıştırın..
`id` int(11) NOT NULL AUTO_INCREMENT,
`haber_baslik` text NOT NULL,
`haber_icerik` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Bu sql kodu basit bir şekilde haberlerimizi depolayacağımız bir veritabanı tablosu yaratıyor. Siz daha da geliştirebilirsiniz tabii ki..
HTML Form’u Oluşturmak
Şimdi yapmamız gereken haber eklemek için bir form oluşturmak ve ona ait javascript fonksiyonlarını yazarak ajax'ı da işin içine dahil etmek suretiyle haber ekleme işlemini gerçekleştirmek. Formumuzun bulunduğu sayfanın kodları şu şekilde.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
<title>grkn.net</title>
</head>
<body>
<form id="HaberEkle" name="HaberEkle" method="post" action="javascript:void(0)">
<p>Haber Başlığı :<br />
<input name="haber_baslik" type="text" id="haber_baslik" />
<br />
Haber Metni :<br />
<textarea name="haber_icerik" cols="45" rows="10" id="haber_icerik"></textarea>
<br />
<input name="ekle" type="submit" id="ekle" value="Ekle" onclick="haber_ekle();" />
<div id="sonuc"></div>
</p>
</form>
</body>
</html>
Bu formu normal bir html formundan farklı kılan 2 tane özelliği var.
1. Formun başlangıç kısmına yazmış olduğumuz action="javascript:void(0)" kodu formun herhangi bir sayfaya post edilmemesini sağlıyor. Bu sayede yeni bir sayfa yüklenmiyor ve bant genişliğinden tasarruf edilmiş oluyor. Belki “3 kb'lık bir sayfanın 1 kere yüklenmesi bana bir şey kaybettirmez” diyebilirsiniz ama aynı sayfayı günde 10.000 kişi kullanırsa bu yaklaşık olarak 30 mb'a karşılık gelir ve aya vurduğunuzda sitenizin sunucu masraflarını karşılamak biraz canınızı sıkabilir
2. Değişiklik ise “ekle” isimli submit butonunun "onClick" yani üzerine tıklandığı anda ne yapılacağını belirtmek için eklediğimiz onclick="haber_ekle();" kodu. Bu kod sayesinde zaten herhangi bir yere gönderilmeyecek olan formu göndermek istediğimizde sayfanın ne yapacağını sayfamıza söylemiş oluyoruz
Burada açıklayacağım başka önemli bir nokta yok, yukarıdaki açıklamalarım dışında tek yaptığımız bildiğiniz html formu oluşturmak..
Javascript Fonksiyonları & Ajax
Şimdi işin en can alıcı ve "ajax" diye duyduğunuz kısmına geldik. Bu kısımda ajax metodu ile verilerimizi gönderebilmek için gerekli fonksiyonları yazacağız! xmlHttpRequest nesnesini yarattığımız fonksiyon hariç diğer tüm fonksiyonları satır satır açıklayacağım. Önce kodlar :
{
xmlHttp=ajax();
if (xmlHttp==null)
{
alert ('Tarayıcınız Ajax Desteklemiyor!');
return;
}
var baslik = document.getElementById('haber_baslik').value;
var icerik = document.getElementById('haber_icerik').value;
var url='haber_ekle.php';
var sc ='haber_baslik='+baslik+'&haber_icerik='+icerik;
xmlHttp.open('POST', url, true);
xmlHttp.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
xmlHttp.setRequestHeader('Content-length', sc.length);
xmlHttp.setRequestHeader('Connection', 'close');
xmlHttp.onreadystatechange=Guncelle;
xmlHttp.send(sc);
}
function Guncelle()
{
if (xmlHttp.readyState==4 && xmlHttp.status == 200)
{
document.getElementById('sonuc').innerHTML=xmlHttp.responseText;
}
}
function ajax()/* Bu fonksiyonu c/p ile alın ve olduğu gibi kullanın
bir zarar yaratmaz.. */
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject('Msxml2.XMLHTTP');
}
catch (e)
{
xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
}
}
return xmlHttp;
}
Şimdi dilerseniz kullandığımız Ajax’a ait metodları ve kodları açıklayalım :
open() : Bu fonksiyon belirtilen bir adrese istekte bulunmamızı ve hangi yöntemle gönderileceği gibi nitelikleri belirmemizi sağlıyor. Aldığı 1. parametre hangi yöntemle veri yollayacağımızı belirtiyor ‘POST’ veya ‘GET’ değerlerini alabilir. 2. parametre ise istek oluşturacağımız adres oluyor. Ben burada yukarıda tanımladığım url adlı değişkeni kullandım ve dikkat ederseniz tırnak ( ‘ ) yok etrafında, eğer bir değişken kullanacaksanız etrafında ‘ veya “ işareti olmamalı burada direk olarak ‘haber_ekle.php’ gibi bir şeyde yazabilirdim ancak ben değişken ile yapmayı daha çok sevdiğim dolayı böyle yaptım. 3. parametremiz ise opsiyonel. Belirtmediğiniz zaman değeri standart olarak true olarak alınır ama yinede belirtmekte fayda var
setRequestHeader(“etiket”,”değer”) : Gönderdiğimiz Ajax istediğine etiket/değer başlığını ekler/tanımlar/belirtir.
onreadystatechange : Bu özellik ise Ajax istediği gönderilip sunucudan istek döndüğünde sayfanın ne tepki vereceğini belirtmemizi sağlayan fonksiyondur. Biz burada = işaretinden sonra Guncelle isimli bir değer atadık ki bu biraz sonra aşağıda tanımlayacağımız fonksiyonun adı olmalı! Bu kısma direk fonksiyonun kendisini de yazabilirsiniz, ancak kod okunulabilirliği açısında pek hoş olmayacaktır.
send(‘GonderilecekVeri’) : Bu fonksiyon ise Open() ile istekte bulunduğumuz sayfaya çeşitli form değerlerini göndermemizi sağlıyor. Tabi tüm bunları kullanıcıya hissettirmeden yapıyor. Ben bu kısımda yine değişken kullandığımdan dolayı ‘ işaretleri olmaksızın send(sc) yaptım; ki sc yukarıda tanımlamış olduğum bir değişkendi. Bu değişkeni oluştururken şuna dikkat ediyoruz: PHP,ASP,JSP..v.b sayfamızda değerleri hangi isimle alacaksak = işaretinden önceki kısım o ada sahip olmalı. Yani biz haber başlığı verisini PHP dosyamızda haber_baslik olarak aldığımız için ‘haber_baslik=’+deger diye başladık. Daha sonra gelen 2., 3. değerleri de & işaretinden sonra aynı şekilde ekliyoruz. Bu cümlecikte deger ile belirttiğim şey kodda da görebileceğiniz gibi ‘baslik’ adlı değişken her zamanki gibi siz değişken kullanmadan da yapabilirsiniz ama değişken kullanmanız tavsiyemdir
Guncelle isimli fonksiyonumuz ile de sunucudan gelen cevabı değerlendiriyoruz. Eğer readyState özelliği 4 değerini almış ve Sunucu durumu 200 ise işlem başarı ile tamamlanmış demektir. Bu readyState özelliğini biraz açmam gerekecek. Bu fonksiyonumsu şey
5 tane değer alabiliyor. Bunlar 0,1,2,3,4 açıklamaları ise aşağıda :
0 = başlatılamadı
1 = yükleniyor
2 = yüklendi
3 = etkileşimli
4 = tamamlandı
eğer koyduğum if sorgusundan önce sizde bir if koyar ve readyState özeliği 4 olmadığında yada 1,2 veya 3’e eşit olduğunda yine innerHTML özelliğini sonuc adlı katmana basit bir yükleniyor resmi yada yazısı yerleştirebilirsiniz.
Bu metodları da açıkladıktan sonra ajax adlı fonksiyonu ve içeriğini açıklama gereği duymuyorum çünkü standart bir fonksiyon. Mantığı ise basit deneme/yanılma yöntemiyle Ajax nesnesini oluşturuyoruz. Aslında bu kod (ajax() fonksiyonu) olduğundan çok daha kısa olabilir ancak internet tarayıcıları arasındaki farklılık psikolojisi yüzünden böyle uzun uzun kodlar yazmak zorunda kalıyoruz.
Neyse, işin javascript ile ilgili olan kısmı bu kadardı dilerseniz şimdi de php sayfamızı kodlayarak işlemi tamamlıyalım!
mysql_connect('localhost', 'root', '');
mysql_select_db('makale');
$haber_baslik = addslashes($_POST['haber_baslik']);
$haber_icerik = addslashes($_POST['haber_icerik']);
$sql = @mysql_query("INSERT INTO haber(haber_baslik,haber_icerik) VALUES ('$haber_baslik','$haber_icerik')");
if($sql)
{
echo 'Haber Basari ile Girildi';
}
else
{
echo 'Haber Girilemedi.';
}
?>
PHP kodu için uzun uzadıya açıklama yapma gereği duymuyorum. Sitemde daha önce PHP ile yayınlanan makalelerde veritabanı işlemlerinden bahsetmiştim yanlış hatırlamıyorsam.
Evet, veritabanına veri giren basit bir haber ekleme betiğini ajax ile yukarıdaki şekilde yapabiliyoruz
Ben yeni başlayan arkadaşlarımız için biraz basit bir yapı kullandım sizler daha büyük çapta projelerinizde kendi basit kod kütüphanelerinizi yazarak yada prototype gibi kod kütüphanelerini kullanarak işleri daha da kolaylaştırabilirsiniz
Şimdilik benden bu kadar..Kodları buradan indirebilirsiniz
Kaynaklar
Nothingrows // Ajax
Ajax-tr // 30 Saniyede Ajax
W3Schools// Ajax
Gürkan oldukça güzel bir makale olmuş. 1-2 ufak kırgınlık herkesde olur
Şaka bir yana sonunda hallettiğine sevindim. Dün geceki halini düşününce 

AJAX-Tr için konuk yazarlık gibi bir olayımız var. Bir şeyler ayarlayabiliriz senin için
abi olabilir valla
makalelerim devam edicek
güzel şeyler olacak buralarda ehehe
Tebrikler güzel makale olmuş
tinymce editörü bir miktar zorluk çıkarığ beni sinir etsede
makaleyi ve kodları güncelledim! yakuter’e tavsiyelerinden dolayı teşekkürler..
[...] Ajax-tr // 30 Saniyede Ajax W3Schools// Ajax Ajax ile POST Methoduyla Veri Yollamak [...]
Kardeş eline sağlık güzel bi makale olmuş yanlız bu türkçe kakrater problemini bir türlü aşamadım ben. Bu konuda yorumunu bekliyorum birde kafama takılan şey şu en son server ‘ın yorumladığı sayfayı içine atıyoruz(haber_ekle php yi sonuc id’li div’e) yani ayrıca bi kaç sorgu daha, bu böylemi olmalı yoksa bi yerler bişeyleri kaçırıyomuyum ?
İyi çalışmalar …
@Omer, bu makale benim için biraz eskilerde kaldığından ve artık Ajax işlemleri için bu metod’u kullanmadığımdantr karakter sorununa olan çözümü tam hatırlamıyorum, ancak http://www.ajax-tr.com sitesi ve Google grubunda eminim ki soruna cevap vardır
2. sorunun cevabı ise evet böyle olmalı yani haber_ekle.php dosyasından dönen sonucu direk olarak div’in içine yazdırıyoruz.
Gündüz bu sorumu buraya yazmandan önce bu fonksiyonu denemiştim ama hata aldığımda hemen vazgeçmiştim (noktalı virgülü unutmuşum
)
Bu fonksiyon türkçe karakter sorununa tam çözüm getiriyo (Forumun birinden buldum).
function un_escape($string)
{
$string = preg_replace(”/%u0130/”, “İ”, $string);
$string = preg_replace(”/%u0131/”, “ı”, $string);
$string = preg_replace(”/%u011F/”, “ğ”, $string);
$string = preg_replace(”/%u011E/”, “Ğ”, $string);
$string = preg_replace(”/%u015F/”, “ş”, $string);
$string = preg_replace(”/%u015E/”, “Ş”, $string);
return $string;
}
değişkeni javascriptle yollarken
escape(document.form.degisken.value)
bu şekilde bi süzgeçten geçiriliyo daha sonra
php dosyamızda da
un_escape($_POST["degisken"])
olarak alındında Herşey türkçe oluyo …
veriyi post ettikten sora formdaki değerleri sıfırlatmayı nasıl yapabiliriz.
@yiit : haber_ekle isimli fonksiyon içinde xmlHttp.send(sc); satırından sonra
document.getElementById('form_id').reset();yaparsan olacaktır satırım. Büyük iht. kodda hata olmaz ancak olursa yine yazarsan sevinirim. Kolay gelsin.
Ellerinize Saglık Cok Güzel Anlatmıssınız basarılarınızın devamını Diliorum
Yorum Yapın
Arayan Bulur
Sayfalar
kategoriler
Destek & Köstek
Yeni düşenler
Arşivler
Linkler
Etiketler
İnternet Ajax Benim Dünyam Bilgisayar Blogroll CSS Duyuru Eleştiri Günlük Genel google Haber Hayat Kategorilenmemiş Kitap Komedi Müzik Makale Makaleler Mim PHP Proje Sinema Tanıtım Web 2.0 Web Geliştirme WordPress Wordpress Eklentisi Yaşam Yazılımlar
Sosyal Mevzular