Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Yardım Masası

SORU: Sayfayi REFRESH yapan HTML Kodlari !
Hocalarim, simdi bir foruma bir mesaj kismi koyacagiz.Fakat bu forumun da her 30 saniye de bir(bir dakikada olabilir) refresh olmasini istiyoruz.Fakat refresh olurken, mesaj yazma anina denk gelirse, mesaji silmeyecek.yani sayfa refresh olacak, son eklenen konulari basa getirecek, son gonrerilen mesajlari gosterecek, tek puf nokta internet explorerin ustundeki refresh butonuna basarmis gibi sayfayi al yeni bastan yapmayacak.

Bu mesajla fizikci hocami buyuk bir dertten kurtardim sanirim.
Kolay gelsin.


Cevaplar

1.  bkz: Ajax
bateristt
12 Ağustos 2006 22:30
2.  Bununla ilgili bir makale yazmıştı fizikci üstadımız sanırım sorunuzun tam cevabı burada olabilir.

bkz. DHTML ile sayfa refresh olmadan dinamik olarak değişen veri göstermek
BaRNeY
13 Ağustos 2006 21:19
3.  Ajax ile o makalede anlatılan yöntem arasında şöyle bir fark var:
- Ajax'da hiçbir şekilde sayfa refresh olmaz. Sadece Javascript'le serverdan bir sayfa request edilir. Cevap olarak gelen data ile ne yapılacaksa yapılır. Sitemizden Ajax örneği olarak PTT ve Çöp Kutusu'na bakabilirsiniz. PTT'de gönderilen mesajları seçtiğinizde sayfa hiç refresh olmadan gönderilen mesajların listelendiğini göreceksiniz.
- Makalede anlatılan iframe + DHTML yönteminde ise gene sayfanın bütünü refresh edilmez. Sayfanın içindeki görünmeyen iframe'de gösterilmek üzere serverdan sayfa talep edilir. Kullanıcının göremediği bu data browsera geldiği zaman ne yapılacaksa yapılır. Sitemizde bunun da örneği var: MBox. Arada bir sayfanın refresh oluyormuş gibi görünmesine neden olan şey bu uygulama. Halbuki refresh olan görünmeyen iframe. (Aslında Firefox'ta görünüyor. Giriş yazdığınız kutunun sol alt köşesine bakın. Küçücük bir kare göreceksiniz. :)

Ajax'ın bu ikinci yönteme karşı iki üstünlüğü var:
1. Serverdan sayfa talep etme işleminin asenkron olması. Yani aynı anda birden çok AJAX talebi yapılabilir.
2. Bu taleplerin kullanıcı tarafından farkedilemiyor olması. Browserın durum çubuğunda sayfanın yüklendiğine dair bir progress bar gösterilmiyor.

Sizin sorunuza gelirsek, sayfa refresh olmadan foruma gelen cevapların otomatik olarak görünmesini istiyorsunuz. İki yöntemle de yapabilirsiniz. Ama ikisinin de implementasyonu biraz karışık. (En azından burada kısa bir kod örneğiyle halledilebilecek türden değil.)

Eğer kolay bir çözüm istiyorsanız şunu öneririm. Javascript ile sayfanızın dakikada bir refresh olmasını sağlayın. Ama eğer mesaj kutusu aktif ise refresh ettirmeyin. Pasif olunca refresh işlemine tekrar izin verin. Bunu önce algoritma olarak açıklayayım, sonra kodu da yazacağım:

1. Kullanıcının mesaj yazıp yazmadığını belirten bir durum değişkeni tanımlayacağız. Boolean tipinde mesajYaziliyor adında bir değişken. Sayfa yüklendiğinde default false olacak.
2. Kullanıcı mesaj yazmak için metin kutusuna girdiğinde mesajYaziliyor=true olacak. Bu durumda sayfa refresh edilmeyecek.
3. Kullanıcı mesaj kutusundan çıktığı zaman mesajYaziliyor=false olacak. Refresh işlemi tekrar başlayacak.
4. Sayfanın dakikada bir refresh edilmesi için Javascript'in setInterval fonksiyonunu kullanacağız.

Aşağıdaki kodu bir dosyaya yapıştırıp, dosya uzantısını HTML yapın ve çift tıklayıp çalıştırın:
<script>
var mesajYaziliyor = false;

function sayfayiYenile()
{
   // mesaj yazılmıyorsa sayfayı yenile
   if(mesajYaziliyor==false)
   {
      window.location.reload();
      alert('yenilendi');
   }
}
</script>
<body onload="setInterval('sayfayiYenile()', 5000)">
Yukarıdaki kod 5000 ms'de bir sayfayiYenile fonksiyonunu çağırıyor.<br>
Dakikada bir olması için 60000 ms'ye ayarlayın.<br>
Burası forum sayfası...<br>
Forum başlığı...<br>
Cevaplar...<br>
Cevaplar...<br>
<br>
Mesaj:<br>
<textarea name=mesaj onclick="mesajYaziliyor=true" onblur="mesajYaziliyor=false">
</textarea><br>
Textarea üzerinde gerçekleşen onclick ve onblur olaylarını kullanarak durum değişkenini ayarlıyoruz.<br>
</body>

Bu çözüm istediğiniz işi yapıyor. Ancak sayfanın bütünüyle refresh ediliyor olması hoş değil. Bunun yerine AJAX kullanmanızı öneririm.
fizikci
13 Ağustos 2006 22:24
4.  Peki hocam bu kodları asp sayfasında kullanabilir miyiz yani asp ile databaseden bilgi alırken veya döviz kuru alıyoruz ya merkez bankasından onun gibi, yani bunu bu kodla yapabilir miyiz? Bunları da sayfayı refresh etmeden yapmamız mümkün mü? Bu kodu nasıl kullanmalıyız?
BaRNeY
14 Ağustos 2006 16:01
5.  ASP ile veya JSP ya da ne bileyim PERL ile de aynı işi yapmak mümkün. Çünkü zaten kodlar tamamen HTML ve Javascript ile yazılmış. Yani client dilleriyle.

Merkez Bankası'ndan data alma işi biraz farklı. Browser Merkez Bankası'na ait sayfanın document elementine erişmenize izin vermez. Merkez Bankası'nın sayfalarına AJAX ile de erişemezsiniz. Bunun için PHP ya da başka bir server tarafında çalışan dil ile Merkez Bankası'ndan veriyi çekip kendi sayfanızdan okumalısınız.

AJAX varken bu tür yaklaşımlar yazılımcı tabiriyle sadece birer takladır. Bu nedenle AJAX'ı öğrenmenizi tavsiye ederim. Tutorial için bkz: http://www.w3schools.com/ajax
fizikci
14 Ağustos 2006 17:38
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.
© 2005, Bilişim Kulübü. (1062 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen