XMLHttpRequest(XHR) nedir?

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 12:13
Ajax (Asynchronous Javascript and XML) artık web uygulamalarında çok büyük değişikliklere ve güzelliklere yol açtı. Bizde bu güzelliklerden yararlanmak için elbette araştırmalar yapıyoruz ve ajax’ın nimetlerinden faydalanmaya çalışıyoruz. Öncelikle Ajax bir teknoloji değil bir geliştirme yöntemidir. Bu makalemizde Ajax’a değilde XMLHttpRequest nesnesine odaklanmaya çalışacağız.

 

Öncelikle Ajaxtan biraz bahsedeyim. Ajax, ismini bu yöntemi kullanan topluluklar tarafından almıştır. Bu yöntem sayesinde Javascript dili ve XML aracılığıyla bir sayfayı tamamen sunucuya göndermeden (postback) ya da yeni bir URL çağırmadan sadece sayfamızın belirli bir kısmanı güncelleyerek, sayfanın sunucuya tamamen gidip gelmesini engellemiş oluruz. Dolayısıyla hem zaman kazanmış oluruz, hem de bu boşluğu güzel görsel detaylarla süsleriz.

 

Ajax’la beraber hayatımıza giren bir yenilikte (aslında yenilik demek biraz yanlış olur) XMLHttpRequest nesnesi. Ajax tipi geliştirme, Microsoft’un birkaç yıl önce geliştirmiş olduğu bir ActiveX bileşeni kullanılarak yapılmakta. Bu bileşenin adı da XMLHttpRequest. Çeşitli rivayetlere göre XMLHttpRequest ilk olarak Internet Explorer’ın 5.0 versiyonunda implemente edilmiş. Yani bu teknik ilk olarak Microsoft tarafından oluşturulmuş ve kullanılmış. Bu tekniğin faydaları görüldükçe de, Opera, Mozilla, Safari, Netscape gibi web tarayıcıları da bu bileşeni kendi browserlarına implemente ettiler. Yani bu bileşenimiz artık tüm popüler browserlarda kullanılmakta.

 

Ne demiştik sayfa sunucuya gönderilmeden geliyordu. Nasıl geliyor? İşte burada XmlHttpRequest’in faydaları ortaya çıkıyor. Bu nesnemiz asenkron bir şekilde istekte(request) bulunabiliyor ve yine asenkron bir şekilde isteğine karşılık cevap(response) verebiliyor. Örneğin bir web uygulaması geliştiriyoruz. Kullanıcımıza bir button ve bir textbox sunuyoruz. Kullanıcı buttona tıkladığında textbox’a girmiş olduğu veri istemci tarafında çalışan bir script aracılığıyla sunucuya gönderiliyor ve sunucudan cevap geri dönüyor. Ancak tüm bu işlemler sayfanın arkasında yapıldığından diğer içerikler sunucuya gönderilmiyor ve hem sunucu kaynakları boşa kullanılmıyor hem de kullanıcı işlemlerini çok daha hızlı gerçekleştirebiliyor.

 

Bu arada ASP.Net 2.0 desteği veren hosting firmaları Atlas teknolojisini de desteklemekte. Bizim yapmamız gereken ise uygulamamızın bin klasörü altında Microsoft.Web.Atlas.dll’i bulundurmak. Atlas Framework’ü sistemimize eklediğimizde bin klasörü içerisine Microsoft.Web.Atlas.dll’i otomatik olarak gelecektir. Ayrıca Visual Studio.Net 2005 IDE’sinde Atlas desteği yok. Bunu da http://atlas.asp.net resmi web sitesinden indirebildiğimiz bir eklenti sayesinde elde edip kolayca kurabiliyoruz.

 

Peki bütün bu açıklamalardan sonra gelelim XMLHttpRequest nesnesinin nasıl kullanılacağına. XMLHttpRequest istemci tarafında yaratıldığı için tarayıcıya farklı isimlerde kullanılır. Internet Explorer tarayıcılarında aşağıdaki javascript koduyla bir XMLHttpRequest nesnesi yaratılabilir;

 

var xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);

 

Eğer istemci browserında Msxml2 bileşeni kurulmuşsa bu yeni versiyon kullanılarak aşağıdaki gibi de XMLHttpRequest nesnesi oluşturulabilir;

 

var xmlhttp = new ActiveXObject(“Msxml2.XMLHTTP”);

 

Bazı browserlarda ise ancak aşağıdaki kodlarla bir XMLHttpRequest nesnesi oluşturmak mümkündür;

 

var xmlhttp = new XMLHttpRequest();

 

Bütün bu detaylardan sonra Ajax yöntemini uygulayan web uygulamalarında bir XMLHttpRequest nesnesi yaratmak genellikle aşağıdaki kod bloğu ile mümkündür. Bu javascript kod bloğunda yapılan iş XMLHttpRequest nesnesinin farklı browserlarda kullanıldığında oluşturulması gerekmektedir. (Gmail’de bu yöntemi kullanmaktadır.) Bizlerde ajax yaklaşımını kullanmak istersek bu javascript fonksiyonundan yararlanmalı ve elimizin altında bulundurmalıyız.

 

function xmlhttp_olustur()
{
var rdeger=null;
try
{
rdeger=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
rdeger=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(oc)
{
retdeger=null;
}
}

if(!rdeger && typeof XMLHttpRequest != "undefined")
{
rdeger=new XMLHttpRequest();
}

return rdeger;
}

 

 

Bu fonksiyondan sonra kalan tek şey XMLHttpRequest nesnesinin open metodu kullanılarak bir web sayfasına post yada get yöntemi ile istekte bulunmak.

Örnek kullanım : xmlhttpnesnesi.open(“GET”, “MakaleSayisi.aspx”, true);

Şimdi XMLHttpRequest nesnesinin metod ve özelliklerini hazırlamış olduguğum tablolar yoluyla öğrenelim.

 

 

 

 

 

 

 

XMLHttpRequest konusunda önemli ipuçları:

 

- XMLHttpRequest nesnelerini kullanarak bir web sayfası üzerinde aynı anda birden fazla asenkron işlemi yapabiliriz. Ancak bunun için birden fazla XMLHttpRequest nesnesi kullanmalıyız. Google Maps uygulaması bunun için en güzel örneklerden biri.

 

- XMLHttpRequest ile bir asp.net web formunu çağırdığımızda hep aynı sonucu alıyorsak(sık görülen bir problem) mutlaka browserımızda cache’lenmiş veriyi bize yollamaktadır. Bunu önlemek için istekte bulunulan sayfada cache işleminin engellememiz gerekir. Şu kod işimize yarayacaktır;

 

Response.ContentType = "text/html";

Response.AddHeader("Cache-Control", "no-cache");

 

 

XMLHttpRequest’in yaptığı işlem normal bir browserın yaptığı işten çok farklı değil aslında. En büyük farkı asenkron bir şekilde aynı sayfa içinde yapması.

Bu yüzden XMLHttpRequest nesnesi ile sorgulanan web sayfasının html çıktısı ne ise responseText ile alınan o metindir.

 

 

Evet böylelikle makalemizin de sonuna geldik. Umarım XMLHttpRequest nesnesi hakkında kafanızdaki soru işaretlerinin bir kısmını da olsa silmiş olmuşumdur.

Ajax’ın nimetlerinden yararlanmaya tam gaz devam etmeniz dileğiyle..

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: ,

Software | Web | Articles

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.
Sitedeki kod ve tasarım değişiklikleri ise Yağız Gönüler tarafından geliştirilmiştir.
2008 © www.yagizgonuler.com

Şifahen değil acilen!

Anket

Yazılım geliştirirken en keyif aldığınız alan hangisi?




Sonuçlar

Son Yorumlar

Comment RSS

Calendar

<<  Ocak 2009  >>
PaSaÇaPeCuCuPa
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

Yazıları geniş takvimde göster

Ne Dinliyorum?

Kirpi - TearDrop (5 saat önce)
Kirpi - My Name Is Kirpi (5 saat önce)
Kirpi - The Song (5 saat önce)
Kirpi - Spell (5 saat önce)
Huseyin Karadayi - Bonus Track Funk Clarinet (String Mix) (5 saat önce)
Huseyin Karadayi - Sacred Gate (5 saat önce)
Huseyin Karadayi - Exotica (5 saat önce)
Huseyin Karadayi - Take Me Away / No Time To Waste (Vocal By Melis Sökmen) (5 saat önce)
Huseyin Karadayi - Eyes Don't Lie (Duet By Enoi & Funky C) (6 saat önce)
Huseyin Karadayi - This Way (Usy Groove) (6 saat önce)

Ne Okuyorum?


Haftanın Sözü


"Sukûnetim asaletimdendir;
Lâkin her lâfa verilecek bir cevabım var.
Bir bakarım lâf lâfmı diye,
Birde bakarım söyleyen adammı diye.."

Mevlânâ Celaleddin-i Belhi Rumi
(1207-1273)

Adanmış Hayatlar

"Zaten aşklar hep yalan dolan,
Sonu hep acı hüsran.
Bize her sevdadan geriye kalan
Sadece Galatasaray..
"

Son Dakika

İstanbul'da Hava

ISTANBUL

Ziyaretçi Sayısı

Ziyaretçi Sayısı