Jump to content

30 Saniyede Ajax


Recommended Posts

XMLHTTPREQUEST nesnesini çağırma

Önce en basit haliyle XMLHTTPREQUEST nesnesinin çağırılışını görelim.

(Birinci yöntem)

nesne = new XMLHttpRequest();[/CODE]

Normal şartlarda bu nesneyi çağırmak gördüğünüz gibi oldukça basit ve açık. Tabi internet explorer yine bize gıcıklık yapıyor ve bu kullanımı tanımayabiliyor. Fakat çözümü yok değil tabiki. İnternet explorer için de nesnemizi şöyle çağırabiliyoruz.

(İkinci yöntem)

[CODE]nesne = new ActiveXObject("Microsoft.XMLHTTP");[/CODE]

Şimdi bu iki çağırma şeklinden faydalanarak tüm tarayıcılarda çalışabilecek bir fonksiyon yazalım. Bu fonksiyon sayfayı ziyaret eden kişinin tarayıcısını kontrol eden ve tarayıcı firefox, opera, safari gibi bir tarayıcı ise birinci yöntemi, internet explorer'da ise ikinci yöntemi kullanan bir fonksiyon olmalı.

[CODE]function nesneyarat() {
var nesne;
var tarayici = navigator.appName;
if(tarayici == "Microsoft Internet Explorer"){
nesne = new ActiveXObject("Microsoft.XMLHTTP");
}else{
nesne = new XMLHttpRequest();
}
return nesne;
}

var http = nesneyarat();[/CODE]

Bu fonksiyon ile XMLHTTPREQUEST nesnemiz çağırılıyor ve http değişkenine atanarak sitede kullanılabilecek duruma geliyor. Bu nesneyi çağırmanın bir çok farklı yolu mevcut. En basitinden buna bir hata yakalama kodları da eklenebilirdi veya eski tip nesne çağırılabilirdi ama bu işi yeni öğrenenler için o kadar zorlamak ve kodu karmaşıklaştırmak istemiyorum. Sonraki örneklerimizde daha gelişmiş fonksiyonlar kullanarak daha tutarlı uygulamalar yapacağız.

İşlem fonksiyonu ve XMLHTTPREQUEST metodları

Sıra geldi işlem yapacak olan fonksiyonumuza. İşlem derken formdan gelen değerleri yani kullanıcının girdiği bilgileri alıp sunucuya gönderip cevap isteyen fonksiyondan bahsediyorum. Örneğimiz için aşağıdaki gibi kısa bir fonksiyon bize yetecektir.

[CODE]function islemkutu() {
var deger = document.erhan.isim.value;
http.open('get', 'kontrol.php?degisken=' + deger);
http.onreadystatechange = cevapFonksiyonu;
http.send(null);
}[/CODE]

ASP kullananlar yukarıdaki kod yerine şunu kullanacaklardır.

[CODE]function islemkutu() {
var deger = document.erhan.isim.value;
http.open('get', 'kontrol.asp?degisken=' + encodeURI(deger));
http.onreadystatechange = cevapFonksiyonu;
http.send(null);
}[/CODE]

Yukarıdaki fonksiyonda open ile get metodu kullanarak kontrol.php dosyasına bilgiyi gönderiyoruz. Buradaki satırların başında http olmasının sebebi benim nesneyi en başta http değişkenine atamış olmam. onreadystatechange ise XMLHTTPREQUEST nesnesinin bir metodudur ve çağırdığımız nesnenin durumunun değişmesi durumunda (örneğin cevap gelirse değişmiş olur) işlem yapar. Burada cevapFonksiyonu 'nu çağırmak için kullandık. XMLHTTPREQUEST nesnesinin metodlarını biraz açacak olursak:

[CODE]abort(): Geçerli isteği iptal eder.[/CODE]

getAllResponseHeaders(): Tüm karşılık başlık etiketilerini ve değerlerini string olarak elde eder.

getResponseHeader("başlıkEtiketi"): Verilen başlık etiketinin taşıdığı değeri string olarak elde eder.

open("metod", "Adres"[, asyncFlag[,"userName"[, "password"]]]): Sorgu gönderilmeden önce, sorgunun gönderileceği adresi, gönderi metodunu ve diğer seçime bağlı netilkleri belirler.

send(içerik): Sorguyu gönderir. Seçime bağlı olarak gönderilebilen verileri ve DOM ile yaratılmış verileri de gönderebilir.

setRequestHeader("etiket", "değer"): Gönderilen sorguya bir etiket/değer başlığını iliştirir.

Sunucudan cevabın alınması

Örneğimize kaldığımız yerden devam ediyoruz. cevapFonksiyonu ismini verdiğimiz fonksiyon sunucudan cevap geldiğinde yapmak istediğimiz işlemi belirlediğimiz fonksiyondur. Tabiki fonksiyonun ismi size kalmış. Onu da örneğimiz için şöyle oluşturalım.

[CODE]function cevapFonksiyonu() {
if(http.readyState == 4){
document.getElementById('yer').innerHTML = http.responseText;
}
}[/CODE]

Burada nesnemizin readyState metodundan faydalanıyoruz. Bu metodun alabileceği değerler ve karşılıkları şu şekildedir.

[CODE]0 = başlatılamadı
1 = yükleniyor
2 = yüklendi
3 = etkileşimli
4 = tamamlandı[/CODE]

Burada 1 ve 4 sayılarının dikkatinizi çekmesini istiyorum. 1 durumunu ekrana yükleniyor yazmak istediğimizde kullanırız. 4'ü ise işlemimiz tamamlandığında (başarılı bir şekilde gerçekleştiğinde) kullanırız. Elbette ileri düzey uygulamalarda (özellikle hata yakalamalarda) diğer durumlar da önemli olacaktır. Örneğimizde de 4 olup olmadığını yani işlemin başarılı bir şekilde gerçekleştirilip gerçekleştirilmediğini kontrol ediyoruz. Eğer başarılı ise sayfamızda yer id'sine sahip unsurun değeri sunucudan gelen cevap (responseText) olacaktır.

Sonuç

Bu anlattıklarımı toparlayarak tek bir dosya haline getirelim ve ismine index.htm diyelim. İçeriği de şu şekilde toparlayalım.

[CODE]<html>
<head>
<title>Yakuter'den XMLHTTPREQUEST</title>
<script type="text/javascript">
function nesneyarat() {
var nesne;
var tarayici = navigator.appName;
if(tarayici == "Microsoft Internet Explorer"){
nesne = new ActiveXObject("Microsoft.XMLHTTP");
}else{
nesne = new XMLHttpRequest();
}
return nesne;
}

var http = nesneyarat();

function islemkutu() {
var deger = document.erhan.isim.value;
http.open('get', 'kontrol.php?degisken=' + deger);
http.onreadystatechange = cevapFonksiyonu;
http.send(null);
}

function cevapFonksiyonu() {
if(http.readyState == 4){
document.getElementById('yer').innerHTML = http.responseText;
}
}
</script>

</head>

<body>

<form name="erhan" action="java script:void(0)" method="get">
<input type="text" name="isim">
<input type="button" name="yap" onclick="islemkutu();" value="Tamam">
</form>

<div id="yer"></div>

</body>
</html>[/CODE]

Sunucuda iletişime geçmek istediğimiz dosyanın da ismine kontrol.php diyelim ve içine şu kodları yazalım.

[CODE]<?php
if ($_GET['degisken']=="ajax-tr")
{ echo "Tamam"; }
else
{ echo "Hata!";}
?>[/CODE]

ASP kullananlar yukarıdaki kod yerine şunu kullanacaklardır.

[CODE]<%
If Request.QueryString("degisken") = "ajax-tr" Then
Response.Write("Tebrikler, dogru yazdiniz.")
Else
Response.Write("Hata, yanlis yazdiniz.")
End If
%>[/CODE]

[/left]

[CODE]http://blog.coderlab.us/rasmus-30-second-ajax-tutorial[/CODE]

Link to comment
Share on other sites

Ajax ile ilgili bu makaleyi görünce bende şöyle bir eklenti yapayım dedim;

Readstate 4 olduğunda yani size diğer sayfa cevap gönderdiğinde geleni illa ki tek bir div veya span içinde göstermek zorunda değilsiniz.

mesela bu konuyu şöyle anlatayım,

siz PHP veya ASP hangi dil olursa olsun gelen cevapla birden fazla div veya spanın içini değiştirmek istiyorsanız şöyle bir çözüm önerebilirim;

işlemleri yaptığınız dil hangisi ise

ASP -->

Response.Write("div1||| Divin içinde yazacak yazı")

PHP -->

echo "div1||| Divin içinde yazacak yazı";

şeklinde dönderirseniz sonuçları cevap fonksiyonunda yapacağınız küçük bir değişiklik ile sayfanızdaki istediğiniz elemanın içini değiştirebilirsiniz.

cevap fonksiyonunun son hali de şöyle olmalıdır:

function cevapFonksiyonu() {

if(http.readyState == 4){

var cevap = http.responseText;

if(cevap.indexOf("|||") != -1)

{

var cevaplar = new Array();

cevaplar = cevap.split("|||");

document.getElementById(cevaplar[0]).innerHTML = cevaplar[1];

}

else

{

document.getElementById('yer').innerHTML = http.responseText;

}

}

}

umarım işinize yarar.

Makale için teşekkürler.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...