# AJAX (programlama)
AJAX (İngilizce: Asynchronous JavaScript and XML, Türkçe: "Eşzamansız JavaScript ve XML"), İnternet sayfalarında JavaScript ve XMLHttpRequest kullanılarak etkileşimli uygulamalar geliştirmeye yarayan bir tekniktir.
Okunuşu konusunda genel bir uzlaşma olmamakla birlikte, çoğunlukla yazıldığı gibi "ajaks" şeklinde okunur. Ancak bazı kişiler, aynı isimdeki futbol takımı örneğinden yola çıkarak "ayaks" şeklinde de telaffuz etmektedir. İngilizcede ise genellikle "ey-ceks" olarak okunur.
En yaygın kullanım alanı, sayfanın yeniden yüklenmesine gerek kalmadan sayfa içeriğinde görünür değişiklikler yapılabilmesidir. XMLHttpRequest nesnesi kullanılarak birden fazla bağımsız işlem gerçekleştirilebilir. Bazı bilişim uzmanılar, AJAX'ın HTML ve XML'den sonra internet yazılımında en yenilikçi gelişme olduğunu ve Web 2.0.'ı sonlandırıp üçüncü evrenin kapılarını açtığını öne sürmüştür.
"Asynchronous JavaScript and XML" kelimelerinin kısaltması olan Ajax, etkileşimli (interaktif) web uygulamaları geliştirmek için kullanılan bir web programlama tekniğidir. Temel amacı, arka planda sunucuyla az miktarda veri alışverişi yaparak sayfayı daha hızlı güncelleyebilen web sayfaları oluşturmaktır. Böylece kullanıcı, istediği her anda tüm web sayfasını yeniden yüklemek zorunda kalmaz. Bu da web sayfalarının etkileşimini, hızını ve kullanılabilirliğini artırır.
Ajax tekniği aşağıdaki teknolojileri kullanır:
  - Bilgiyi biçimlendirmek ve görüntüsünü değiştirmek için XHTML (veya HTML) ve CSS.
  - Görüntülenecek bilgiyi dinamik olarak göstermek ve onunla etkileşimde bulunmak için, özellikle JavaScript ve JScript gibi ECMAScript tabanlı kullanıcı tarafı betik dili (İngilizce: "scripting") ile erişilen DOM.
  - Web sunucusu ile veri alışverişinde kullanılan XMLHttpRequest nesnesi. Bazı Ajax çerçevelerinde ve durumlarda, web sunucusuyla iletişim için XMLHttpRequest yerine iframe veya dinamik olarak eklenen JavaScript etiketleri (İngilizce: "tag") de kullanılabilir.
  - Kullanıcı ile sunucu arasındaki veri alışverişlerinde genellikle XML formatı kullanılır. Ancak önceden hazırlanmış HTML, düz metin (İngilizce: "plain text"), JSON ve hatta EBML gibi herhangi bir format da tercih edilebilir. Bu dosyalar sunucu tarafında herhangi bir script dili (PHP, ASP vb.) ile üretilmiş olabilir.
  - DHTML, LAMP ve SPA gibi teknolojilerden farklı olarak, Ajax tek başına bir teknoloji değildir  ancak birçok teknolojinin birlikte kullanılmasını ifade eden bir terimdir.


## Tarihsel bilgi.
Hazırdaki bir web sayfasına, tamamen yeniden yüklemeden asenkron (eşzamansız) içerik ekleme teknikleri, 1996'da Internet Explorer ile gelen iframe ve 1997'de Netscape (Mozilla'nın ilk dönemlerinde geliştirilmesi durdurulmuştur) ile ortaya çıkan layer öğesi kadar eskidir. Her iki öğe de herhangi bir harici URL'yi alarak ana sayfayı değiştirebilen src özniteliğine sahipti. Daha sonra, tarayıcı tarafında çalışan bu teknolojiler DHTML adı altında anılmaya başlandı. Macromedia firmasının Flash uygulaması ise 4. sürümünden itibaren XML ve CSV formatındaki dosyaları, sayfayı yeniden yüklemeye gerek kalmaksızın uzak sunucudan yükleyebilme özelliğine sahipti.
Microsoft'un Remote Scripting (MSRS, 1998'de tanıtıldı) teknolojisi, bu tekniklere daha zarif bir alternatif olarak ortaya çıktı; veriler, istemci tarafında çalışan ve JavaScript ile iletişim kurabilen bir Java applet tarafından çekiliyordu. Bu teknik, Internet Explorer 4 ve Netscape Navigator 4 ve sonrası sürümlerde çalışıyordu. Microsoft daha sonra Internet Explorer 5'te XMLHttpRequest nesnesini oluşturdu ve bu tekniği ilk olarak Microsoft Exchange Server 2000 sürümüyle gelen Outlook Web üzerinde kullandı.
Web geliştirme topluluğu, ilk olarak "microsoft.public.scripting.remote" haber grubu ve daha sonra bloglar aracılığıyla iş birliği yaparak farklı tarayıcılarda tutarlı sonuçlar elde etmek için uzak betik çalıştırma teknikleri geliştirdi. 2002 yılında kullanıcı topluluğu, Java applet yerine XMLHttpRequest'i kullanmak üzere Microsoft Remote Scripting üzerinde bir değişiklik yaptı.
ARSCIF gibi Uzak Betik Çalıştırma Çerçeveleri 2003 yılında ortaya çıktı ve bu, Microsoft'un ASP.NET içerisinde Callbacks özelliğini sunmasından kısa bir süre öncesine denk gelmektedir.
Ayrıca, Dünya Çapında Ağ Konsorsiyumu (W3C) tarafından sunulan ve sunucu ile kullanıcı ajanı arasında dinamik iletişimi mümkün kılan çeşitli öneriler bulunmaktadır, ancak bunların çoğu yaygın destek görmemektedir. Bunlar arasında şunlar yer alır:
  - HTML 4'te tanımlanan ve belgeler içine rastgele içerik yerleştirmek için kullanılan object öğesi (XHTML 1.1 altında inline frame'lerin yerini alır)


## Avantajları ve dezavantajları.
Bant genişliği kullanımı açısından;
HTML, ağ tarayıcısı (browser) üzerinde oluşturulurken, JavaScript işlemleri ve işlenecek veriler kullanıldığında, sunucudan gelen sayfa bilgisi gerektiğinden daha az yer kapladığından AJAX web sayfalarının görece daha hızlı yüklendiği gözlemlenebilir.
İçeriğin “isteğe bağlı olarak yüklenmesi”nin yanı sıra, bazı web uygulamaları önce Olay Yöneticilerini (event handler), ardından ilgili fonksiyonları indirir. Bu teknik, karmaşık yapıya ve işlevselliğe sahip web uygulamalarının ihtiyaç duyduğu yüksek bant genişliği tüketimini önemli ölçüde azaltır.


## Erişilebilirlik.
Web uygulamalarında Ajax teknolojilerinin kullanılması, bilgisayar erişilebilirliği konusunda araçlar geliştiren tasarımcılar için pek çok sorunu beraberinde getirir. Ayrıca, ABD’de birçok devlet destekli geliştirme projesinde Section 508 gibi Amerikan uyum standartlarına sıkı şekilde uyulması gerekmektedir. Bu standartlara uyulmaması, bazı durumlarda bilgisayar uyumluluğuyla ilgili iş anlaşmalarının iptaline ve hukuki problemlere yol açabilmektedir.
Bu nedenle, Ajax ile hazırlanmış çözümlerin büyük bir kısmı grafik tabanlı tarayıcılara yönelik olduğundan, geliştiriciler diğer platform ve tarayıcı kullanıcılarının ihtiyaçlarını da karşılamak zorundadır.
Web tasarımcıları, web tarayıcısının tüm sayfayı yeniden yüklemesine gerek kalmaksızın veri işlenebildiği durumlarda bazen web sayfasının sadece belirli bölümlerinde Ajax kullanabilir. Ajax kullanamayanlar ise sayfanın tamamını yenilemeye ve yüklemeye devam edebilmelidir. Geliştiriciler, Ajax destekleyen tarayıcılarda daha gelişmiş özellikler sunsalar da, erişilebilirlik başta olmak üzere Ajax içermeyen ortamlardaki kullanıcıların deneyimini kısıtlamamalıdır.


## Ajax Nerede Kullanılır.
Ajax, web üzerinde hemen hemen birçok alanda kullanılır. Örneğin, Google Maps’te kullanıcı harita üzerinde bir bölgeyi çektiğinde, sayfa tamamen yeniden yüklenmeden bilgi anında güncellenir. Tüm bu işlemler Ajax’ın asenkron (eşzamansız) özelliği sayesinde gerçekleşir. Ajax, aynı zamanda Gmail’de de kullanılmaktadır. Bilgiler yüklenirken sayfanın tamamının yeniden yüklenmesine gerek kalmaz. Yeni bir posta geldiğinde, gelen kutusuna otomatik olarak eklenir. Bu, kullanıcının sürekli yenileme düğmesine basma ihtiyacını ortadan kaldırır. Google Translate de Ajax kullanır; kullanıcı bir metni bir dilden başka bir dile çevirmek için yazmaya başladığında, Ajax o an diğer dildeki çeviriyi aynı sayfada anında gösterir.


## Örnekler.
  - Google Maps 
  - Gmail 
  - Google Pages 
  - Mint 
  - Google Suggest 
  - ZK Demo 


### AJAX kütüphaneleri.
  - MIT.FESA – Hızlı, Kolay ve Akıllı AJAX nesnesi.
  - PHPLiveX
  - EceX  YÖNLENDİRME ]
  - jQuery 
  - ajaks
  - Dojo 
  - civciv-lib
  - moofx 
  - behaviour 
  - Prototype
  - Sardalya - (Sar)mal (D)inamik (Al)t(ya)pısı (İngilizce) 
  - script.aculo.us 
  - XScript 
  - Xajax
  - Microsoft ASP.NET Ajax