27 Haziran 2008Ajax ile sayfa degişmeden belli aralıklarla veri çekmesi
Merhabalar yeniden yeniden yazı yazıyor olmak beni heyecanlandırdı
hani derler ya ilk gördüğüm zamandaki heyecan hala içimde benimki de öyle olsa gerek neyse komikliği bırakıp işimize bakalım.
Bir çoğumuzun başına gelebilecek bir konuya değinmek istiyorum. Sayfa değişmeden bir başka sayfadaki verileri belli aralıklarla istediğimiz alan içinde güncellememiz gerekebilir. Ben de bu durum için bir örnek vereceğim.
Örneğimiz istek.php dosyasına istek yapıp çıkan sonucu bizim istediğimiz alanda gösterecek. Örneğimiz php ve javascript frameworku olan jquery ve onun bir eklentisi jquery.timer i kullanacağız.
Öncelikle istek yapacağımız dosyamızı bir tanımlayalım.
istek.php dosya içeriğimiz aşağıdaki gibi olucaktır.
echo str_shuffle(uniqid(md5(mt_rand())));
istek dosyamız kendisine her istek yapıldığında uniq ( benzersiz ) bir md5 sum oluşturacaktır. str_shuffle() fonksiyonu ise oluşturulan md5 stringi karıştıracaktır ve en sonunda da echo ile elde ettiğimiz stringi ekrana yazıyoruz.
Şimdi ise sıra geldi isteği yapacak olan sayfamızı yapmaya. İsteği yapacak olan sayfamız bir adet javascript fonksiyondan oluşacak. Bu fonksiyon ajax yöntemi kullanarak istek.php ye istek yapıp dönen sonucu almamızı sağlıcak.
index.php:
<html> <head> <title>Ajax ile Refresh:: www.ysfkc.com</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="jquery.js" type="text/javascript"></script> <script src="jquery.timer.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { $.timer(3000,function() { a(); }); }); function a() { $.ajax({ type:'GET', url:'istek.php', success: function (msg) { $('div#adi').html(msg); } }); } </script> </head> <body> <div id="adi">Mesaj Güncellencek Bekleyiniz...</div> </body> </html>
isteği yapacak olan index dosyamızıda bitirdik. İşlemlerden bahsedelim.
<script src="jquery.js" type="text/javascript"></script> <script src="jquery.timer.js" type="text/javascript"></script>
satırları ile javascript kütüphanemizi ve onun eklentisini sayfamıza dahil ediyoruz. Ardından
$(document).ready(function () { $.timer(3000,function() { a(); }); });
kısmı ile jquery nin sayfa yüklendiğin de çalışmasını sağlayacak olan document.ready özelliğini kullanarak tetiklenmesi gereken metodlarımızı belirtiyoruz. burda $.time() fonksiyonu jquer.timer.js den gelmektedir. kullanımı ise $.timer(süre,function) şeklindedir. Biz burada kendimizin tanımlamış olduğumuz a() fonksiyonunu her 3 saniye de bir tetikle şeklinde bir ifade belirttik.
function a() { $.ajax({ type:'GET', url:'istek.php', success: function (msg) { $('div#adi').html(msg); } }); }
a() isimli fonksiyonumuzda ise jquery kütüphanesinin ajax metodu kullandık. Aldığı metodları bir gözden geçirelim kısaca
type: Ajaxın istek yapacağı method. GET ya da POST
url: Ajaxın istek yapacagı sayfa url si
success: Ajaxın tamamlandığında tetiklenecek işlemlerimizi burada belirtiyoruz. buradaki msg istek sonucunda dönen veri msg ye aktarılıyor.
Evet arkadaşlar göründüğü üzere çok basit 1 fonksiyonla sayfamız değişmeden bir başka sayfadaki verileri belli saniye aralıkları ile yenileyerek alabiliyoruz.
Kullandığımız örneğimize buradan bakabilir ve buradan da indirebilirsiniz.

bu jquery.timer.js’yi nerden indiriyoruz bulamadım ben
Aşağıdaki Linkte örneğimizin dosyaları mevcut indirip bakabilirsiniz.
http://www.ysfkc.com/dosyalar/ajax.tar.gz
peki şöyle birşeyi nasıl yapabiliriz? istek.php sayfasında rand(1,10) olsun sadece. Eğer istek.php’den gelen değer 10 olursa sayfa yenilenmesin. ajaxla çektiğimiz sayfanın değerine göre sayfamızdaki js kodlarını şekillendirebilirmiyiz?
ajax ın durdurma fonksiyonu abort u inceleyebilirsin mehmet.
abort uda bulamadım ben.jquery kütüphanesinin bi özelliğimi?
vede ben bu kütüphaneyi kullanmak istemiyorum.kendi işime yarayacak kadar bi ajax fonksiyonum var ama onuda “setTimeout(’fonkisyon()’,15000);” kullanarak çalıştıramıyorum.niye olmuyor? jquery kütüphanesini inceliyorum, hiçbirşey anlamıyorum
aşağıdaki linkteki bilgileri araştırabilirsiniz.
http://docs.jquery.com/Ajax/ajaxStop#callback
ama sanırım bu benim istediğim şey değil. istek.php’den gelen bi değere göre ajax scriptlerinde işlem yaptırmak istiyorum.dediğim gibi istek.php’de sadece rand(1,10) olsun, eğer gelen değer 10 ise tekrar etmekten vazgeçsin.Bu değeri nasıl js kodlarında işleme sokabilirim.
istek.php nin en altına;
$(document).ready(function () {
$.timer(3000,function() {
a();
});
});
fonksiyonunu iptal ettiren bir kod lazım sanırım…
a() fonksiyonunu silip dediğim şekilde düzenleme yaparsanız istediğiniz olacaktır.
if (msg == 1) bu satırda eğer dönen mesaj 1 ise timer olayını stop ediyorum siz artık oraya kendi özel değerinizi belirtirsiniz.
hazıra konmaya çalışmıyorum.deniyorum gerçekten ama bulamıyotum hiçbirşey..
benim istek.php’den gelen değerim çok fazla ama içine $deger = 1; dedim buna göre yapmam gerek.js içine php değişkenini nasıl koyabilirim?
[...] merak etti
teşekkürler Yusuf KOÇ güzel ve anlaşılır bi döküman olmuş, ama artık içinde ilk günkü heycan kalmadı heralde ?
@serkan
yoğun iş temposu ve bayram tatilinin araya girmesi etkiledi biraz..
Şimdi bunu çalıştırdım ancak şimdi sürekli yenileniyor mu yoksa veri güncellendiği zaman mı yenileniyor.Örneğin ben veritabanından çekiyorum bilgiyi yönetici onayı geldiğinde yenilenmesini istiyorum yani bunu nasıl yapabilirim??
Belirttiğiniz süre içerisinde sürekli yenilemektedir.
Tam olarak istediğim bu değil yani belirlediğim sürede sürekli yenilenmesini istemiyorum, veritabanında değişiklik olduğu zaman bu kodun çalışması için ne yapmalıyım ?
Örneğin;
ben yorum yazdım buray sizde onayladınız yönetim panelinden ben sayfadan çıkmadan ve yenilemeden yorumum otamatik olarak onaylanmış olarak gözükecek.
Bu anlattığım bir örnek bunun gibi birşey istiyorum, yardımlarınız için teşekkürler!
@NetHaLiL
bunun için ajax a gerek yok örneğin yorumlarınızın kontrolünü yaparak onaylayan bir php betiği yazıldıktan sonra cronjob ile bu yazılan betik belli zaman aralıkları ile sunucuya otomatik çalıştırılıp yeni eklenen bir yorum var ise onu update ederek onaylı hale getirilir.
Öncelikle cronjob hakkında bilgi edinmeniz gerekiyor. Google de cronjob diye aratırsanız bilgilere ulaşabilirsiniz..