Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Ajax, JavaScript’in sayfanın tamamını yeniden yüklemeden sunucuyla veri alışverişi yapmasını sağlayan yaklaşımdır. Açılımı “Asynchronous JavaScript and XML” olsa da günümüzde XML kullanmak zorunlu değildir; uygulamalar çoğunlukla fetch() ile JSON gönderip alır. Örneğin bir form gönderildiğinde yalnızca sonuç alanının güncellenmesi, Ajax kullanımına tipik bir örnektir.

Ajax nasıl çalışır?​


Tarayıcıdaki JavaScript bir HTTP isteği başlatır. Sunucu isteği işler ve genellikle JSON biçiminde yanıt döndürür. JavaScript bu yanıtı aldıktan sonra DOM üzerinde yalnızca gerekli bölümü değiştirir. Kullanıcı bu sırada başka işlemler yapabilir; sayfa tamamen yenilenmediği için mevcut arayüz ve durum korunur.

Ajax ayrı bir programlama dili veya özel bir sunucu teknolojisi değildir. İstek göndermek için eski kodlarda XMLHttpRequest, güncel kodlarda ise çoğunlukla fetch() kullanılır. İstek yine HTTP kurallarına, sunucunun yanıtına ve tarayıcının aynı kaynak politikasına tabidir.

YöntemUygun kullanımDikkat edilmesi gereken
fetch()Yeni uygulamalarda JSON ve standart HTTP istekleriHTTP hatalarını response.ok ile ayrıca kontrol edin
XMLHttpRequestEski kod tabanları veya ayrıntılı ilerleme olaylarıOlay tabanlı ve daha ayrıntılı bir kullanım gerektirir
Form gönderimiBasit veri gönderme ve normal sayfa akışıAjax yoksa sayfa genellikle yeniden yüklenir


Somut örnek: Sunucudan mesaj alma​


Aşağıdaki örnekte tarayıcı, aynı uygulamadaki /api/message adresine GET isteği gönderir ve dönen JSON içindeki mesajı sayfaya yazar. İstemci kodunun çalışması için sunucunun bu adrese JSON yanıtı vermesi gerekir.

HTML:
<button id="load">Mesajı getir</button>
<p id="result">Henüz istek yapılmadı.</p>

<script>
const button = document.querySelector('#load');
const result = document.querySelector('#result');

button.addEventListener('click', async () => {
  result.textContent = 'Yükleniyor...';

  try {
    const response = await fetch('/api/message');

    if (!response.ok) {
      throw new Error(`HTTP ${response.status}`);
    }

    const data = await response.json();
    if (typeof data.message !== 'string') {
      throw new Error('Beklenen message alanı bulunamadı');
    }
    result.textContent = data.message;
  } catch (error) {
    result.textContent = 'İstek başarısız oldu.';
    console.error(error);
  }
});
</script>

Sunucunun başarılı durumda en az şu yapıda JSON döndürmesi beklenir:

Kod:
{"message":"Sunucudan gelen mesaj"}

  1. HTML dosyasını, /api/message yolunu sağlayan bir web sunucusundan yayınlayın. Dosyayı doğrudan file:// ile açmak yerine bir geliştirme sunucusu kullanın.
  2. Butona basın. Başarılı durumda paragrafın içeriği sunucunun gönderdiği mesajla değişir.
  3. “İstek başarısız oldu.” görünürse tarayıcının geliştirici araçlarındaki Network sekmesinden adresi, HTTP durum kodunu ve yanıtı kontrol edin.
  4. Yanıt JSON değilse veya message alanı yoksa sunucu yanıtını istemcinin beklediği biçime getirin.

Burada response.ok yalnızca HTTP durumunun başarılı aralıkta olup olmadığını kontrol eder; sunucunun döndürdüğü iş verisinin doğru olduğunu garanti etmez. Ayrıca fetch() ağ hatalarında reddedilebilir, ancak 404 veya 500 gibi HTTP yanıtlarında kendiliğinden hata fırlatmaz. Bu nedenle response.ok kontrolü önemlidir.

Hangi yöntemi ne zaman kullanmalı?​


Ajax uygulamasında seçim çoğunlukla kodun yaşı ve isteğin gereksinimine göre yapılır:

Sunucu başka bir alan adında bulunuyorsa tarayıcı CORS kurallarını uygular. İstemciye rastgele bir başlık eklemek bu kuralı aşmaz; sunucunun uygun CORS yanıt başlıklarını vermesi gerekir. Aynı kaynakta çalışan istemci ve API kullanmak, başlangıçta gereksiz CORS sorunlarını azaltır.

Sık yapılan hatalar​


  • İsteğin tamamlanmasını beklemeden yanıtı kullanmak: fetch() bir Promise döndürür; await veya .then() kullanılmalıdır.
  • Sadece ağ hatasını ele almak: 404 ve 500 yanıtlarını da response.ok ile kontrol edin.
  • Her yanıtı JSON sanmak: Sunucu HTML, boş gövde veya farklı bir içerik döndürebilir. Yanıt biçimini API sözleşmesiyle eşleştirin.
  • Yüklenme ve hata durumlarını göstermemek: Kullanıcıya isteğin devam ettiğini ve başarısız olduğunu açıkça bildirin.
  • Güvenilmeyen yanıtı doğrudan innerHTML içine koymak: Metin gösterirken textContent kullanmak, gereksiz HTML yorumlamasını önler.

Ajax kullanan bir arayüz tasarlarken önce API’nin isteği, yanıt biçimini ve hata durumlarını netleştirin. Ardından istemcide yükleniyor, başarılı ve başarısız durumları ayrı ele alın. İhtiyaç yalnızca yeni sayfa açmaksa normal bağlantı veya form gönderimi daha basit olabilir; sayfanın bir bölümünü yenilemek yeterliyse Ajax uygun çözümdür.

Sık sorulan sorular​


Ajax ile WebSocket aynı şey midir?​


Hayır. Ajax çoğunlukla istemcinin başlattığı bağımsız HTTP isteklerinden oluşur. WebSocket ise bağlantıyı açık tutarak istemci ve sunucunun iki yönlü, sürekli iletişim kurmasına uygundur.

Ajax kullanınca güvenlik kontrolleri ortadan kalkar mı?​


Hayır. Kimlik doğrulama, yetkilendirme, veri doğrulama ve akışın gerektirdiği CSRF koruması sunucuda yine uygulanmalıdır. CORS ise tarayıcının sunucunun bildirdiği politikaya göre uyguladığı ayrı bir okuma kısıtıdır; API yetkilendirmesinin yerine geçmez. Ajax yalnızca verinin sayfa yenilenmeden taşınma biçimini değiştirir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.