Ajax'ta Uzmanlaşma, Bölüm 7: İsteklerde ve yanıtlarda XML kullanılması
Ne zaman iyi, ne zaman kötü bir fikir olduğunu öğrenin
Düzey: Orta
Brett McLaughlin (brett@newInstance.com),
Yazar ve Editör, O'Reilly Media Inc.
10 Ekim 2006
Sıradan Ajax geliştiricileri bile Ajax içindeki x harfini ve bunun XML anlamına geldiğini fark edecektir. XML, her tür programlama ortamındaki en yaygın veri biçimlerinden biridir ve zamanuyumsuz uygulamalarda sunucu yanıtları açısından gerçek avantajlar sunar. Bu makalede, sunucuların bir isteğe yanıt verirken nasıl XML gönderdiklerini görürsünüz.
Günümüzde, XML ile karşılaşmadan önemli bir programlama gerçekleştiremezsiniz. XHTML'e geçmeyi düşünen bir Web sayfası tasarımcısı, JavaScript ile çalışan bir Web programcısı, uygulama açıklayıcıları ve veri bağlama kullanan sunucu tarafındaki bir programcı ya da XML tabanlı veritabanlarını inceleyen bir arka yüz geliştiricisi de olsanız genişletilebilir biçimleme diliyle her yerde karşılaşırsınız. Dolayısıyla, XML'in Ajax'ın temelini oluşturan teknolojilerden biri olduğunu düşünmek çok da şaşırtıcı değildir.
Ancak, bu düşünce, teknik gerçeklikten çok, Ajax uygulamalarında kullanılan temel
nesneler için yapılan kötü ad seçimlerini yansıtmaktadır
(XMLHttpRequest
). Diğer bir deyişle, çoğu kişi,
XMLHttpRequest
nesnesinin her zaman XML kullandığını varsaydıklarından,
XML'in Ajax'ın temel bir parçası olduğunu düşünürler. Ancak durum böyle değildir ve
bunun nedenleri, bu makalenin birinci bölümünün konusudur. Aslında, Ajax
uygulamalarının çoğunda, XML'in çok nadiren göründüğünü fark edeceksiniz.
XML'in Ajax'ta gerçek kullanımları vardır ve XMLHttpRequest
bunlara
da olanak verir. Sunucuya XML göndermenizi engelleyecek hiçbir şey yoktur. Bu
dizinin önceki makalelerinde, veri göndermek için düz metin ve ad/değer
parametrelerini kullanmıştınız, ancak XML de geçerli bir biçimdir. Bu makalede, bunu
nasıl yapacağınız üzerinde duracağız. Daha da önemlisi, istek formatınız için
neden XML kullanabileceğinizi ve çoğu durumda, neden kullanmamanız
gerektiğini anlatacağım.
Ajax uygulamaları ve bunların XML kullanımlarıyla ilgili varsayımlarda bulunmak
kolaydır; hem teknoloji adı (Ajax) hem de kullandığı temel nesne
(XMLHttpRequest
) XML'in kullanıldığını ima eder ve Ajax ile bağlantılı
XML kullanımını her zaman duyarsınız.
Ancak, bu algılama tamamen yanlıştır ve zamanuyumsuz uygulamaların yazılması söz
konusu olduğunda malzemelerinizi gerçekten bilmek isterseniz, bu algılamanın yanlış
olduğunu bilmelisiniz -- ve daha da iyisi neden yanlış olduğunu
bilmelisiniz.
XMLHttpRequest: Kötü adlar ve HTTP
Bir teknolojiyle ilgili olabilecek en kötü şeylerden birisi, teknolojinin çok
popüler olması ve temel parçalarını değiştirmenin imkansız hale gelmesidir. Ajax
uygulamalarındaki temel nesnelerden biri olan XMLHttpRequest
için de
durum böyledir. Bakıldığında, HTTP istekleri üzerinden XML göndermek ya da bir çeşit
XML biçiminde HTTP istekleri göndermek için tasarlanmış gibi görünür. Adının ne
ima ettiğine bakmadan, nesnesinin asıl yaptığı şey, bir HTTP isteği
göndermek için istemci kodunuza (genellikle Web sayfanızdaki JavaScript) bir yol
sağlamasıdır. Hepsi bu kadar; yaptığı başka bir şey yoktur.
Bu nedenle, XMLHttpRequest
nesnesinin adını,
HttpRequest
ya da belki, yalnızca Request
gibi daha doğru
bir şeyle değiştirmek iyi olurdu. Ancak, bugün milyonlarca geliştirici
uygulamalarında Ajax kullanıyor ve kullanıcıların çoğunun Internet Explorer 7.0 ya
da Firefox 1.5 gibi yeni tarayıcı sürümlerine geçmesinin yıllar süreceğini
bildiğimiz için böyle bir hareket olanaklı değil. Sonuç olarak nesneyi
XMLHttpRequest
adıyla kullanmanız gerekiyor ve bunun kötü bir şekilde
adlandırıldığını fark etmek de geliştiricilere kalıyor.
XMLHttpRequest
nesnesini desteklemeyen bir tarayıcıyla (özellikle
Windows üzerinde) çalışırken bilinen en iyi son çare yöntemlerinden biri
Microsoft IFRAME
nesnesinin kullanılmasıdır. XML, HTTP, hatta bir
istek gibi bile görünmüyor değil mi? Açıkçası, bunların hepsini içerebilir, ancak
XMLHttpRequest
nesnesinin, XML ya da HTTP ile ilgili olmaktan çok, bir
sayfanın yeniden yüklenmesine gerek kalmadan isteklerin yapılmasıyla ilgili olduğu
gerçeği açıkça ortaya konmalıdır.
Başka bir yaygın hata da XML'in sahne arkasında bir şekilde kullanıldığını
düşünmektir -- dürüst olmak gerekirse, eskiden ben de böyle düşünürdüm! Ancak, bu
görüş, teknolojiyi anlama açısından zayıflığımızı da gösterir. Bir kullanıcı
tarayıcısını açıp sunucudaki bir Web sayfası için istekte bulunmak üzere
http://www.google.com
ya da http://www.headfirstlabs.com
gibi şeyler yazar.
http://
kısmını yazmasa bile tarayıcı, tarayıcı adres çubuğundaki bu
parçayı doldurur. Bu birinci parça -- http://
-- iletişim nasıl
oluştuğuyla ilgili, anlaşılması çok da zor olmayan bir ipucu sağlar: Hypertext
Transfer Protocol (Bağlantılı Metin Aktarımı İletişim Kuralı) yoluyla. Sunucuyla
iletişim kurmak için Web sayfanıza bir kod yazdığınızda, bu ister Ajax, ister normal biçimli bir
POST, ister bir metin bağlantısı kullansın, söz konusu olan HTTP'dir.
|
Tarayıcılar ve sunucular arasındaki tüm Web iletişiminin büyük bir kısmının HTTP
üzerinden olduğunu bildiğimizde, XMLHttpRequest
tarafından gizli bir
biçimde kullanılan aktarım ya da teknolojinin XML olduğu düşüncesi çok da anlamlı
olmaz. XML kesinlikle HTTP isteği içinde gönderilebilir, ancak HTTP, çok net
bir şekilde tanımlanmış bir standarttır ve yakın bir zamanda da herhangi bir şekilde
ortadan kalkacak gibi görünmemektedir.
İsteğinizde özel olarak XML kullanmıyorsanız ya da sunucu, yanıtı size XML biçiminde
göndermiyorsa, XMLHttpRequest
nesnesinde düz eski HTTP'yi kullanmaktan
başka yapmanız gereken bir şey yoktur. Birisi size bir daha "Evet, buna
XMLHttpRequest
denmesinin nedeni, arkada XML kullanmasıdır" dediğinde
yalnızca gülümseyin ve sabırlı bir şekilde onlara HTTP'nin ne olduğunu ve XML'in
HTTP üzerinden gönderilebildiğini, ancak XML'in bir veri biçimi olduğunu,
bir aktarım iletişim kuralı olmadığını anlatın.
XML'in (gerçekten) kullanılması
Şimdiye kadar size XML'in Ajax içinde kullanılmadığı yerlerden söz ettim.
Ancak, Ajax içindeki x ve XMLHttpRequest
içindeki
XML
gerçekliğini devam ettiriyor ve Web uygulamalarında XML kullanmak
için birkaç seçeneğiniz var. Bu bölümde temel seçeneklere bakacak ve bu makalenin
geri kalanında, bu konuda gerçekten ayrıntıya gireceksiniz.
Zamanuyumsuz uygulamalarınızda iki temel XML uygulaması görürsünüz:
- Bir Web sayfasından sunucuya, XML biçiminde bir istek gönderme
- Web sayfanızda sunucudan XML biçiminde bir istek alma
Bunlardan birincisi -- XML biçiminde bir istek gönderme -- isteğinizi, API kullanarak ya da yalnızca metin dizeleri oluşturarak, XML formatında sunucuya göndermenizi gerektirir. Bu seçenekte, eldeki ana iş, isteğin XML kurallarıyla uyumlu ve sunucunun anlayabileceği bir şekilde oluşturulmasıdır. Dolayısıyla, gerçekten XML biçimine odaklanmanız gerekir; göndermek istediğiniz veriler elinizdedir ve tüm yapmanız gereken, bunları XML semantiğiyle hazırlamaktır. Bu makalenin geri kalanı, Ajax uygulamalarınızda XML'in bu kullanımı üzerinde odaklanır.
Bu seçeneklerin ikincisi -- XML biçiminde bir istek alma -- sunucudan bir yanıt almanızı ve verileri XML'den çıkarmanızı gerektirir (yine bir API kullanarak ya da biraz kaba kuvvet yaklaşımıyla). Bu durumda, sunucudan gelen veriler üzerinde odaklanırsınız ve verileri, yapıcı bir şekilde kullanmak için XML'den çekip çıkarmanız gerekir. Bu dizinin bir sonraki makalesinin konusu da budur ve o zaman bu konu ayrıntılarıyla ele alınacaktır.
XML kullanımının ayrıntılarına girmeden önce size küçük bir uyarıda bulunayım: XML, küçük, hızlı, alandan tasarruf etmenizi sağlayacak bir biçim değildir. Sonraki birkaç bölümde ve bu dizinin bir sonraki makalesinde de göreceğiniz gibi XML'i bu bağlamda kullanmak için önemli nedenler vardır ve XML, düz metin istekleri ve yanıtlarıyla karşılaştırıldığında (özellikle yanıtlarda) bazı avantajlara sahiptir. Ancak, iletilerinize XML'in gerektirdiği tüm biçim imlerini ve semantiği eklediğiniz için XML her zaman düz metinden daha fazla alan kaplayacak ve daha yavaş olacaktır.
Bir masaüstü uygulaması gibi çalışan parlak ve hızlı bir uygulama yazmak
istiyorsanız, XML, başlamak için en iyi nokta olmayabilir. Düz metinle başlayıp, XML
için belirli bir gereksinimle karşılaşırsanız, bu harikadır; ancak, en baştan XML
kullanırsanız, uygulamanızın yanıt verebilirliğini yavaşlatmanız neredeyse kesin bir
sonuçtur. Çoğu durumda, düz metni göndermek -- name=jennifer
gibi
ad/değer çiftlerini kullanmak -- metni, aşağıdaki gibi XML'e çevirmekten daha hızlı
olacaktır:
<name>jennifer</name> |
XML'in zaman kaybettirdiği tüm yerleri bir düşünün: Metnin XML olarak hazırlanması; fazladan bilgilerin gönderilmesi (dikkat ederseniz çevre öğeleri, XML üstbilgisini ya da daha gerçekçi bir isteğin parçası olabilecek başka şeyleri belirtmedim); sunucunun XML'i ayrıştırması, bir yanıt oluşturulması, yanıtın yeniden XML olarak hazırlanması ve Web sayfanıza geri gönderilmesi; son olarak yanıtın sayfanızda ayrıştırılması ve verilerin kullanılması. Dolayısıyla, XML'i ne zaman kullanacağınızı öğrenin, ancak birçok durumda uygulamanızı daha hızlı yapacağını düşünerek uygulamanızı oluşturmaya XML'den başlamayın; XML, daha çok, birazdan da sözünü edeceğimiz gibi esneklik sağlar.
XML'i, bir istemciden sunucuya veri göndermek için kullanılan format olarak ele alalım. Öncelikle, bunun teknik açıdan nasıl yapılacağını görecek, daha sonra da bunun ne zaman iyi bir fikir olduğu ve ne zaman olmadığı üzerinde duracağız.
Ad/değer çiftlerinin gönderilmesi
Yazdığınız Web uygulamalarının yaklaşık %90'ında, kodunuzu sunucuya gönderilecek ad/değer çiftleriyle bitirirsiniz. Örneğin, bir kullanıcı Web sayfanızdaki bir forma adını ve adresini yazarsa, formdaki verileri aşağıdaki şekilde alabilirsiniz:
firstName=Larry lastName=Gullahorn street=9018 Heatherhorn Drive city=Rowlett state=Texas zipCode=75080 |
Bu verileri sunucuya göndermek için yalnızca düz metin kullanıyorsanız, kodunuz Liste 1'deki gibi görünebilir. (Bu, bu dizinin birinci makalesinde kullanılan örnek I'e benzer bir örnektir. Bkz. Kaynaklar.)
Liste 1. Ad/değer çiftlerinin düz metin olarak gönderilmesi
function callServer() { // Get the city and state from the Web form var firstName = document.getElementById("firstName").value; var lastName = document.getElementById("lastName").value; var street = document.getElementById("street").value; var city = document.getElementById("city").value; var state = document.getElementById("state").value; var zipCode = document.getElementById("zipCode").value; // Build the URL to connect to var url = "/scripts/saveAddress.php?firstName=" + escape(firstName) + "&lastName=" + escape(lastName) + "&street=" + escape(street) + "&city=" + escape(city) + "&state=" + escape(state) + "&zipCode=" + escape(zipCode); // Open a connection to the server xmlHttp.open("GET", url, true); // Set up a function for the server to run when it's done xmlHttp.onreadystatechange = confirmUpdate; // Send the request xmlHttp.send(null); } |
Ad/değer çiftlerinin XML'e dönüştürülmesi
Bunun gibi veriler için biçim olarak XML kullanmayı istiyorsanız, yapmanız gereken ilk şey verileri saklamak için temel XML biçimini kullanmak olacaktır. Ad/değer çiftlerinizin tümü XML öğelerine dönüştürülebilir; burada, öğe adı çiftin adı ve öğenin içeriği de değer olur:
<firstName>Larry</firstName> <lastName>Gullahorn</lastName> <street>9018 Heatherhorn Drive</street> <city>Rowlett</city> <state>Texas</state> <zipCode>75080</zipCode> |
Elbette, XML bir kök öğenizin ya da yalnızca bir belge parçasıyla çalışıyorsanız (XML belgesinin bir parçası) çevreleyen bir öğenin olmasını gerektirir. Dolayısıyla, yukarıdaki XML'i aşağıdaki gibi bir koda dönüştürebilirsiniz:
<address> <firstName>Larry</firstName> <lastName>Gullahorn</lastName> <street>9018 Heatherhorn Drive</street> <city>Rowlett</city> <state>Texas</state> <zipCode>75080</zipCode> </address> |
Şimdi bu yapıyı Web istemcinizde oluşturmaya ve sunucuya göndermeye -- neredeyse -- hazırsınız.
Ağ üzerinden XML göndermeye başlamadan önce, verileri gönderdiğiniz sunucunun -- ve komut dosyasının -- gerçekten de XML'i kabul ettiğinden emin olmak istiyorsunuz. Birçoğunuz için bu, aptalca da olsa yapılması gereken bir nokta gibi görünebilir; ancak, yeni programcıların çoğu, ağ üzerinden XML gönderirlerse, bunun doğru biçimde alınacağını ve yorumlanacağını varsayarlar.
Aslında, XML biçiminde gönderdiğiniz verilerin doğru olarak alındığından emin olmak için gerçekleştirmeniz gereken iki adım vardır:
- XML'i gönderdiğiniz komut dosyasının veri biçimi olarak XML'i kabul ettiğinden emin olun.
- Komut dosyasının, verilerinizi gönderdiğiniz belirli XML biçimini ve yapısını kabul ettiğinden emin olun.
Bunların ikisi de gerçekten bir insanla konuşmanızı gerektirebilir, sizi bu konuda uyarıyorum! XML olarak veri gönderebilmeniz önem taşıyorsa, komut dosyası yazarlarının çoğu size iyilikte bulunur; bu nedenle, XML kabul edecek bir komut dosyası bulmak çok da zor değildir. Yine de, kullandığınız biçimin komut dosyasının beklediği biçimle eşleştiğinden emin olmanız gerekir. Örneğin, sunucunun aşağıdaki gibi verileri kabul ettiğini düşünün:
<profile> <firstName>Larry</firstName> <lastName>Gullahorn</lastName> <street>9018 Heatherhorn Drive</street> <city>Rowlett</city> <state>Texas</state> <zip-code>75080</zip-code> </profile> |
Bu, yukarıdaki XML'e benzer -- iki nokta dışında:
- İstemciden gelen XML bir
address
öğesi içinde olmasına rağmen sunucu, verilerin birprofile
öğesi içinde bulunmasını beklemektedir. - İstemciden gelen XML
zipCode
öğesini kullanır, ancak sunucu, posta kodunun birzip-code
öğesinde olmasını beklemektedir.
Büyük bir sistem içinde bu gerçekten küçük noktalar, verilerinizi kabul eden ve işleyen sunucu ile kötü bir şekilde çöken ve Web sayfanıza -- ve büyük olasılıkla kullanıcılara -- şifreli bir hata iletisi veren sunucu arasındaki farkı oluşturur. Bu nedenle, sunucunun neyi beklediğini anlamalı ve verileri bu biçime uygun hale getirmelisiniz. Daha sonra -- yalnızca o zaman -- XML'in bir istemciden sunucuya gönderilmesi konusunda gerçek teknik sorunlarla uğraşmaya hazır olursunuz.
XML'i sunucuya gönderme söz konusu olduğunda, verilerinizi almak ve XML'e dönüştürürken, verilerinizi gerçekten iletmek için harcadığınızdan daha fazla kod harcarsınız. Aslında, XML dizesini sunucuya göndermek üzere hazırladıktan sonra bu işlemi, diğer herhangi bir düz metni gönderdiğiniz şekilde gerçekleştirirsiniz; bu işlemi görmek için Liste 2'ye bakın.
Liste 2. Ad/değer çiftlerinin XML olarak gönderilmesi
function callServer() { // Get the city and state from the Web form var firstName = document.getElementById("firstName").value; var lastName = document.getElementById("lastName").value; var street = document.getElementById("street").value; var city = document.getElementById("city").value; var state = document.getElementById("state").value; var zipCode = document.getElementById("zipCode").value; var xmlString = "<profile>" + " <firstName>" + escape(firstName) + "</firstName>" + " <lastName>" + escape(lastName) + "</lastName>" + " <street>" + escape(street) + "</street>" + " <city>" + escape(city) + "</city>" + " <state>" + escape(state) + "</state>" + " <zip-code>" + escape(zipCode) + "</zip-code>" + "</profile>"; // Build the URL to connect to var url = "/scripts/saveAddress.php"; // Open a connection to the server xmlHttp.open("POST", url, true); // Tell the server you're sending it XML xmlHttp.setRequestHeader("Content-Type", "text/xml"); // Set up a function for the server to run when it's done xmlHttp.onreadystatechange = confirmUpdate; // Send the request xmlHttp.send(xmlString); } |
Bu kodun çoğu, üzerinde durulmaya değer birkaç nokta dışında, kendi kendini açıklar niteliktedir. Birincisi, isteğinizdeki verilerin el ile XML olarak biçimlendirilmesi gerekir. Belge Nesne Modeli'nin (DOM) kullanımına ilişkin üç makaleden sonra bu biraz hayal kırıklığına neden olmuştur sanırım, değil mi? Hiçbir şey JavaScript kullanan bir XML belgesini oluştururken DOM kullanmanızı engellemez; bu durumda, GET ya da POST isteğiyle ağ üzerinden göndermeden önce DOM nesnesini metne dönüştürmeniz gerekir. Bu nedenle, verileri olağan dize işlemiyle basitçe biçimlendirmek çok daha kolay olur. Elbette, hata ve yazım yanlışları ortaya çıkabileceğinden XML ile uğraşan bir kod yazarken daha da dikkatli olmanız gerekir.
XML'inizi oluşturduktan sonra, büyük oranda metni gönderirken açtığınıza benzer
bir bağlantı açarsınız. Bazı tarayıcılar GET sorgu dizelerine uzunluk sınırlaması
getirdiği ve XML de oldukça uzun olabildiği için ben, XML için POST isteklerini
kullanmayı tercih ediyorum; Liste 2'de GET isteğinden uygun
şekilde POST isteğine nasıl geçildiğini görebilirsiniz. Ayrıca, istekte
bulunduğunuz URL'nin sonuna eklenen bir parametre olarak gönderilmek yerine XML, send()
yöntemiyle gönderilir. Bunların tümü oldukça küçük farklılıklardır ve
ayarlanmaları kolaydır.
Yine de tamamen yeni bir kod satırı yazmanız gerekir:
xmlHttp.setRequestHeader("Content-Type", "text/xml"); |
Bunu anlamak çok da zor değil: Yalnızca sunucuya düz eski ad/değer çiftleri
göndermek yerine XML gönderdiğinizi belirtir. Her iki durumda da verileri metin
olarak gönderirsiniz, ancak burada text/xml
olarak kullanırken,
diğerinde gönderilen XML düz metin olarak kullanılır. Az önce ad/değer çiftlerini
kullandıysanız bu satır şöyle okunur:
xmlHttp.setRequestHeader("Content-Type", "text/plain"); |
Sunucuya, XML gönderdiğinizi bildirmeyi unutursanız sorun yaşayabilirsiniz, bu nedenle bu adımı unutmayın.
Bunların hepsini bir araya getirdikten sonra, yapmanız gereken tek şey
send()
yöntemini çağırmak ve XML dizesini geçirmektir. Sunucu XML
isteğinizi alır ve (ön çalışmanızı yaptığınızı varsayarak) XML'i kabul eder,
ayrıştırır ve size bir yanıt gönderir. Her şey bundan ibarettir -- birkaç kod
değişikliği yapılmış XML istekleri.
XML gönderilmesi: İyi mi, kötü mü?
XML yanıtları için XML isteklerini (ve bu makaleyi) terk etmeden önce, isteklerinizdeki XML kullanımının hassasiyeti üzerinde biraz duralım. XML'in aktarım açısından hiçbir şekilde en hızlı veri biçimi olmadığından söz etmiştim, ancak üzerinde düşünülmesi gereken daha birçok nokta var.
XML'in oluşturulması basit değildir
Fark etmeniz gereken ilk şey, XML'in isteklerde kullanmak üzere kolayca oluşturabileceğiniz bir şey olmadığıdır. Liste 2'de gördüğünüz gibi verileriniz, XML semantiğiyle hızlı bir şekilde karmaşıklaşabilir:
var xmlString = "<profile>" + " <firstName>" + escape(firstName) + "</firstName>" + " <lastName>" + escape(lastName) + "</lastName>" + " <street>" + escape(street) + "</street>" + " <city>" + escape(city) + "</city>" + " <state>" + escape(state) + "</state>" + " <zip-code>" + escape(zipCode) + "</zip-code>" + "</profile>"; |
Bu çok kötü görünmeyebilir, ancak bunun yalnızca altı alanı olan bir XML parçası olduğu da unutulmamalıdır. Geliştireceğiniz Web formlarının çoğunda 10 - 15 arasında alan olacaktır; tüm isteklerinizde Ajax kullanmasanız da, bu noktayı göz önünde bulundurun. En azından gerçek verilerle harcadığınız kadar zamanı köşeli ayraçlarla ve biçim imi adlarıyla harcarsınız ve küçük hatalar yapma olasılığınız oldukça yüksektir.
Buradaki başka bir sorun da -- önceden de belirttiğim gibi -- bu XML'i el ile oluşturmanız gerektiğidir. Bir DOM nesnesini, istek olarak gönderebileceğiniz bir dizeye dönüştürmek için iyi ve basit yöntemler olmadığı için DOM'nin kullanılması iyi bir seçenek değildir. Bu nedenle, bunun gibi dizelerle çalışmak en iyisidir -- ancak bu, aynı zamanda yeni geliştiriciler için gerçekleştirilmesi ve anlaşılması en zor seçenektir. Bu örnekte, tüm XML'i tek bir satırda oluşturdunuz; bunu birkaç adımda yaptığınızda her şey daha karmaşıklaşır.
XML, isteklerinize hiçbir şey eklemez
Karmaşıklık sorununun ötesinde, istekleriniz için XML kullanmak, düz metin ve ad/değer çiftleriyle karşılaştırıldığında size gerçekten fazla avantaj (sağlayacağı herhangi bir avantaj varsa) sağlayacak değildir. Bu makaledeki her şeyin, ad/değer çiftlerini kullanarak gönderebileceğiniz verilerle aynı verileri almaya (Liste 1'e bakın) ve bunları XML ile göndermeye odaklandığını düşünün. Hiçbir noktada XML ile gönderebileceğiniz bir şeyi düz metin kullanarak gönderemeyeceğiniz belirtilmedi; bunun nedeni, hemen hemen hiçbir zaman XML kullanarak gönderebileceğiniz bir şeyi düz metin kullanarak gönderememenizin söz konusu olmamasıdır.
Ve bu, gerçekten de XML ve istekler ile ilgili ana noktadır: Çok seyrek olarak bunu yapmanızı gerektirecek bir durumla karşılaşırsınız. Bu dizinin bir sonraki makalesinde, bir sunucunun düz metin kullanarak yaparken çok zorlanacağı bazı şeyleri yapmak için XML kullanabileceğini göreceksiniz; ancak, istekler söz konusu olduğunda bu durum geçerli değildir. Yalnızca XML kabul eden bir komut dosyasından söz etmiyorsanız (çok az da olsa bunlardan var), hemen her istek durumunda düz metin kullanmanız daha iyi olacaktır.
Kesinlikle Ajax içindeki XML'i anlamaya başladığınızı hissediyor olmalısınız. Ajax uygulamalarının XML'i kullanmak zorunda olmadıklarını ve XML'in veri aktarımı için bir çeşit sihirli araç olmadığını biliyorsunuz. Bir Web sayfasından bir sunucuya XML gönderme konusunda da oldukça rahat olmalısınız. Daha da önemlisi, bir sunucunun isteklerinizi gerçekten işleyeceğinden ve yanıtlayacağından emin olmak için neler yapılması gerektiğiniz biliyorsunuz: Sunucu komut dosyasının XML'i ve XML'in verileri gönderdiğiniz biçimini kabul ettiğinden emin olmalısınız.
XML'in neden isteklere ilişkin veri biçimi için her zaman harika bir seçim olmadığı konusunda da artık iyi bir fikriniz olmalı. Gelecek makalelerde, XML'in yardımcı olduğu bazı durumları, ancak çoğu istekte, her şeyi yavaşlattığını ve karmaşıklaştırdığını göreceksiniz. Dolayısıyla, genellikle bir makalede öğrendiklerinizi hemen kullanmaya başlamanızı önerdiğim halde, burada öğrendiklerinizi kullanma konusunda çok dikkatli olmanızı öneriyorum. Ajax uygulamalarında XML isteklerinin yeri vardır, ancak bu yer, düşündüğünüz kadar geniş değildir.
Bu dizinin bir sonraki makalesinde, sunucuların XML kullanarak nasıl yanıt verdiklerini ve Web uygulamalarınızın bu yanıtları nasıl işleyebildiklerini göreceksiniz. Neyse ki, bir sunucunun Web uygulamasına XML göndermesi için, bunun tam tersinden daha çok sayıda neden vardır; bu yüzden, o makalenin teknik ayrıntılarını daha fazla kullanacaksınız; şimdilik, XML'in neden her zaman harika bir fikir olmadığını (en azından istekleri gönderirken) anladığınızdan emin olun. İsteklere ilişkin veri biçimi olarak XML kullanan bazı Web uygulamalarını denemek ve gerçekleştirmek ve daha sonra düz metne dönmek ve hangisinin sizin için daha hızlı ve kolay geldiğini belirlemek isteyebilirsiniz. Bir sonraki makaleye kadar çevrimiçi kalın.
Bilgi Edinme
-
Ajax'ta
Uzmanlaşma: Bu dizinin önceki makalelerini okuyun.
- XML:
Çeşitli teknik makaleler ve ipuçları, senaryolar, standartlar ve IBM Redbook
yayınları için developerWorks XML Zone sitesine bakın.
- xml.com: Deneyimli bir XML programcısı
değilseniz, XML konusunda anlaması en kolay çevrimiçi kaynaklardan biriyle başlayın.
- "Build
dynamic Java applications" (Philip McCarthy, developerWorks,
Eylül 2005): Java™ bakış açısıyla Ajax'a sunucu tarafından bir bakış.
- "Java
object serialization for Ajax" (Philip McCarthy,
developerWorks, Ekim 2005): Ağ üzerinden nesne gönderme ve Ajax ile etkileşimde bulunma konularını Java bakış açısıyla inceler.
- "Call
SOAP Web services with Ajax" (James Snell, developerWorks,
Ekim 2005): Ajax'ın var olan SOAP tabanlı Web hizmetleriyle bütünleştirilmesine ilişkin bu ileri düzey makaleyi inceleyin; Ajax tasarım şablonunu kullanarak Web tarayıcısı tabanlı SOAP hizmetleri istemcisini nasıl uygulayacağınızı gösterir.
- World Wide Web Consortium'daki DOM Ana Sayfası: DOM ile ilgili her şeyin başlangıç noktasını ziyaret edin.
- DOM
Level 3 Core Specification (DOM Düzey 3 Çekirdek Belirtimi): Çeşitli dillerden Belge Nesne Modeli'nin kullanabileceği tipleri ve özellikleri kullanarak çekirdek DOM'yi tanımlayın.
- ECMAScript
language bindings for DOM (DOM için ECMAScript dil ilişkilendirmeleri): Bir JavaScript programcısıysanız ve kodunuz için DOM kullanmak istiyorsanız, Düzey 3 Belge Nesne Modeli Çekirdeği tanımlarına ilişkin bu ek ilginizi çekecektir.
- "Ajax:
A new approach to Web applications" (Jesse James Garrett , Adaptive
Path, Şubat 2005): Ajax moniker teriminin ilk kez kullanıldığı bu makaleyi okuyun -- tüm Ajax geliştiricileri bu makaleyi okumalıdır.
- developerWorks
teknik etkinlikleri ve Web yayınları: Teknik geliştiricilere yönelik bu yazılım brifinglerini takip edin.
- developerWorks Web geliştirme
alanı: Web oluşturma becerilerinizi makaleler, senaryolar, forumlar, vb.
araçlarla genişletin.
Ürün ve teknoloji edinme
- Head
Rush Ajax, Brett McLaughlin (O'Reilly Media, 2006):
Bu makaledeki fikirleri Head First yöntemiyle öğrenin.
- Java and
XML, Second Edition (Brett McLaughlin, O'Reilly
Media, Inc., 2001): Yazarın XHTML ve XML dönüşümleriyle ilgili görüşlerini okuyun.
- JavaScript:
The Definitive Guide (David Flanagan, O'Reilly
Media, Inc., 2001): JavaScript ve dinamik Web sayfalarıyla çalışmaya ilişkin kapsamlı yönergeleri inceleyin. Yayınlanacak olan yeni basımda Ajax ile ilgili iki yeni bölüm vardır.
- Head
First HTML with CSS & XHTML (Elizabeth and
Eric Freeman, O'Reilly Media, Inc., 2005): Standartlaşmış HTML ve XHTML ve CSS'yi HTML'ye uygulamayla ilgili daha fazla bilgi öğrenin.
- IBM deneme yazılımı: developerWorks'deki yazılımı doğrudan yükleyerek bir sonraki geliştirme projenizi oluşturun.
Tartışma
- developerWorks
Web günlükleri: DeveloperWorks topluluğuna katılın.
- Ajax forum on developerWorks: AJAX'ı yeni öğrenen ya da etkin olarak kullananWeb geliştiricilerinden oluşan bu forumda yeni bilgiler öğrenin, düşüncelerinizi tartışın, bildiklerinizi paylaşın.
Brett McLaughlin, Logo günlerinden bu yana bilgisayarlarla ilgili çalışmalar yapmaktadır (Küçük üçgeni hatırlıyor musunuz?) Son yıllarda, Java ve XML topluluklarında en çok tanınan yazarlardan ve programcılardan biri oldu. Kendisi, Nextel Communications şirketi için karmaşık kurumsal sistemler uygulaması, Lutric Technologies için uygulama sunucuları yazma görevlerini üstlendi ve en son O'Reilly Media, Inc. için önemli kitaplar yazma ve yayına hazırlama işlerini yürütüyor. Brett'in, yeni kitabı Head Rush Ajax, Ajax'a Head First adlı ödüllü ve yenilikçi bir yaklaşım getiriyor. Son kitabı Java 1.5 Tiger: A Developer's Notebook, Java teknolojisinin en yeni sürümüyle ilgili ilk kitap olma özelliğini taşıyor. Artık bir klasik olan Java and XML adlı kitabı ise, Java dilinde XML teknolojilerinin kullanılması üzerine en açıklayıcı çalışma olmaya devam ediyor. |