XML DOM - XMLHttpRequest nesnesi

XMLHttpRequest Nesnesi

XMLHttpRequest nesnesi HTTP protokolüne tam erişim sağlar, POST ve HEAD istekleri yanı sıra normal GET isteklerini yapma yeteneği içerir. XMLHttpRequest, Web sunucusunun yanıtı hem eşzamanlı hem de eşzamanlı olmayan olarak geri döndürebilir ve içerik hem metin hem de DOM belgesi olarak geri döndürebilir.

XMLHttpRequest olarak adlandırılmış olsa da, XML belgeleri ile sınırlı değildir: herhangi bir türdeki metin belgesini alabilir.

XMLHttpRequest nesnesi adlı AJAX Web uygulama mimarisinin bir ana fonksiyonudur.

tarayıcı desteği

XMLHttpRequest tüm modern tarayıcılar tarafından iyi desteklenmektedir. Tek tarayıcı bağımlılığı XMLHttpRequest nesnesinin oluşturulmasıdır. IE 5 ve IE 6'da, IE'ye özgü ActiveXObject() yapıcı fonksiyonu kullanılmalıdır. Aşağıda XMLHttpRequest Nesnesi Bu bölümde anlatılan.

W3C Standartlaştırma

XMLHttpRequest nesnesi henüz standartlaştırılmamıştır, ancak W3C standartlaştırma çalışmasına başlamıştır, bu kılavuzda anlatılan içerikler standartlaştırma çalışma taslağına dayanmaktadır.

Mevcut XMLHttpRequest uygulaması nispeten tutarlıdır. Ancak standartla hafif farklılıklar olabilir. Örneğin, bir uygulama null döndürebilirken, standart boş bir dizi gerektirir veya uygulama readyState'ı 3 olarak ayarlayabilir ve tüm yanıt başlıklarının mevcut olmasını garanti etmez.

Özellik

readyState

HTTP isteklerinin durumu. Bir XMLHttpRequest yeni oluşturulduğunda, bu özelliğin değeri 0'dan başlar ve tam bir HTTP yanıtını alana kadar 4'e kadar artar.

Her durumun bir ilgili gayri resmi adı vardır. Aşağıdaki tablo, durumları, adlarını ve anlamlarını gösterir:

Durum Ad Tanım
0 Uninitialized İlk durum. XMLHttpRequest nesnesi oluşturulmuştur veya abort() yöntemi ile sıfırlandı.
1 Open open() yöntemi çağrılmıştır, send() yöntemi çağrılmamıştır. İstek henüz gönderilmemiştir.
2 Sent Send() yöntemi çağrılmıştır, HTTP istekleri Web sunucusuna gönderilmiştir. Yanıt alınmamıştır.
3 Receiving Tüm yanıt başlıkları alınmıştır. Yanıt gövdesi alınmaya başlanmıştır, ancak tamamlanmamıştır.
4 Loaded HTTP yanıtının tamamen alınması.

readyState değeri, abort() veya open() yöntemlerinden biri çağrıldığında işlem sırasında bir istek olduğunda azalmaz. Bu özelliğin değeri her arttığında, onreadystatechange olay elemanı tetiklenir.

responseText

Şimdiye kadar sunucuya alınan yanıt gövdesi (başlıklar dahil değil), veya henüz veri alınmadıysa, boş bir dizi olur.

readyState 3'ten küçükse, bu özellik bir boş dizi olur. readyState 3 olduğunda, bu özellik şu ana kadar alınan yanıt parçasını döner. readyState 4 olduğunda, bu özellik tam yanıt gövdesini saklar.

Eğer yanıt, yanıt gövdesi için belirtilmiş karakter kodlamasını içeren bir başlık içeriyorsa, bu kodlamayı kullanılır. Aksi takdirde, Unicode UTF-8 olarak varsayılır.

responseXML

İstek cevabının yanıtı, XML olarak çözümlenir ve olarak kullanılır Document nesnesidöndürülür.

status

tarafından sunucu döndürülür HTTP durum koduolarak, 200 başarılı, 404 "Bulunamadı" hatası gibi. readyState 3'den küçükse bu özelliğin okunması bir istisna neden olabilir.

statusText

Bu özellik, adı yerine numara ile belirtilmiş istemin HTTP durum kodunu adlandırır. Yani durum 200 olduğunda "OK", durum 404 olduğunda "Bulunamadı" hatasıdır. readyState 3'den küçükse bu özelliğin okunması bir istisna neden olabilir.

Olay yöneticisi

onreadystatechange

Her zaman readyState özelliği değiştiğinde çağrılan olay yöneticisi fonksiyonudur. readyState 3 olduğunda, bu da birden fazla kez çağrılabilir.

Yöntem

abort()

Geçerli yanıtı iptal edin, bağlantıyı kapatın ve tüm kararlı ağ faaliyetlerini sonlandırın.

Bu yöntem XMLHttpRequest nesnesini readyState 0 durumuna sıfırlar ve tüm kararlı ağ faaliyetlerini iptal eder. Örneğin, istem çok uzun sürdüğünde ve yanıt artık gerekli olmadığında bu yönteme çağrılabilir.

getAllResponseHeaders()

HTTP yanıt başlıklarını çözülmemiş bir dize olarak döndürün.

readyState 3'den küçükse bu yöntem null döndürür. Aksi takdirde, bu yöntem sunucunun gönderdiği tüm HTTP yanıt başlıklarını döndürür. Başlık tek bir dize olarak döndürülür, satır başına bir başlık. Her satır, satır sonu işareti "\r\n" ile ayrılır.

getResponseHeader()

Belirtilen HTTP yanıt başlıklarının değerini döndürün. Parametre, döndürülecek olan HTTP yanıt başlıklarının adıdır. Herhangi bir harf büyüklüğü ile başlık adını belirleyebilirsiniz, başlık adı ile karşılaştırma büyük/küçük harf duyarsızdır.

Bu yöntemin geri dönüş değeri, belirtilen HTTP yanıt başlıklarının değeri, bu başlığı almadıysanız veya readyState 3'den küçükse boş bir dizedir. Birden fazla belirtilen adlandırılmış başlık alındığında, bu başlıkların değerleri birleştirilerek geri döndürülür, başlıkların değerleri arasında virgül ve boşluk ile ayrılır.

open()

HTTP istem parametrelerini başlatın, örneğin URL ve HTTP yöntemi, ancak istem göndermez.

send()

HTTP istemini gönderin, open() yöntemine iletilen parametreler ve bu yönteme iletilen seçmeli istem gövdesi kullanılarak.

setRequestHeader()

Bir açılmış ancak gönderilmemiş isteme HTTP istemi ayarlamak veya eklemek için.

XMLHttpRequest.open()

HTTP talep parametrelerini başlatmak

Sözdizimi

open(method, url, async, username, password)

method parametresi, talep için kullanılacak HTTP yöntemidir. Değerler arasında GET, POST ve HEAD bulunur.

url parametresi, talebin ana主体dır. Çoğu tarayıcı, aynı kaynak güvenlik stratejisi uyguluyor ve bu URL'nin, içeren betiğin metni ile aynı ana ad ve portta sahip olmasını gerektirir.

async parametresi, talebin asenkron olarak çalıştırılacağını belirtir. Bu parametre false ise, talep同步 olur ve send() için yapılan çağrılar, yanıt tamamen alınana kadar bloke olur. Bu parametre true veya atlanırsa, talep asenkron olur ve genellikle bir onreadystatechange olay elemanı gerektirir.

username ve password parametreleri, url için gerekli yetkilendirme sağlamak için seçmeli parametredir. Belirlendiğinde, url tarafından belirlenen herhangi bir yetkilendirme bu parametreler tarafından geçersiz kılmaktadır.

Açıklama

Bu yöntem, send() yöntemi tarafından daha sonra kullanılmak üzere istek parametrelerini başlatır. readyState'ı 1 olarak ayarlar, önceki olarak belirtilmiş tüm istek başlıklarını ve önceki olarak alınmış tüm yanıt başlıklarını siler ve responseText, responseXML, status ve statusText parametrelerini varsayılan değerlerine ayarlar. readyState 0 olduğunda (XMLHttpRequest nesnesi yeni oluşturulduğunda veya abort() yöntemi çağrıldığında) ve readyState 4 olduğunda (yanıt alınmışken) bu yöntemin çağrılması güvenlidir. Diğer durumlar için çağrıldığında, open() yönteminin davranışı belirlidir.

send() yöntemi için kullanılacak istek parametrelerini saklamak ve XMLHttpRequest nesnesini yeniden kullanmak için yeniden ayarlamak dışında, open() yöntemi başka bir davranışa sahip değildir. Bu yöntemin çağrıldığı zaman, implementasyonun genellikle bir Web sunucusuna olan ağ bağlantısını açmadığına dikkat edilmelidir.

XMLHttpRequest.send()

bir HTTP talebi göndermek

Sözdizimi

send(body)

open() yöntemini çağırarak belirlenen HTTP yöntemi POST veya PUT ise, body parametresi talep gövdesini belirler ve bir dize veya Document nesnesiEğer talep gövdesi gerekli değilse, bu parametre null'dır. Herhangi bir diğer yöntem için, bu parametre kullanılamaz ve null olmalıdır (bazı implementasyonlar parametrenin atlanmasını izin vermez).

Açıklama

Bu yöntem, bir HTTP istemi gönderir. open() çağrısı yapılmamışsa veya daha spesifik olarak readyState 1 değilse, send() bir istisna fırlatır. Aksi takdirde, bir HTTP istemi gönderir, bu istem aşağıdaki unsurlardan oluşur:

  • Önceden çağrılan open() ile belirlenen HTTP yöntemi, URL ve kimlik doğrulama bilgileri (varsa).
  • Önceden setRequestHeader() çağrısıyla belirlenen istem başlığı (varsa).
  • Bu yönteme gönderilen body Parametreler.

İstek yayımlandıktan sonra, send() readyState'ı 2'ye ayarlar ve onreadystatechange olay denetleyicisini tetikler.

Önceden çağrılan open() parametresi async false olduğunda, bu yöntem engellenir ve döner, readyState 4 olduğunda ve sunucu yanıtının tamamen alınması sağlanır. Aksi takdirde, async parametresi true ise veya bu parametre atlanmışsa, send() hemen döner ve sunucu yanıtının, daha sonra anlatılacağı gibi, arka planda bir iş parçasında işlenmesi sağlanır.

Sunucu yanıtında bir HTTP yeniden yönlendirme varsa, send() yöntemi veya arka planda çalışan bir iş parçası otomatik olarak yeniden yönlendirmeyi takip eder. Tüm HTTP yanıt başlıkları alınmış olduğunda, send() veya arka planda çalışan iş parçası readyState'ı 3'e ayarlar ve onreadystatechange olay denetleyicisini tetikler. Yanıt uzunsa, send() veya arka planda çalışan iş parçası durum 3'te onreadystatechange olay denetleyicisini tetikleyebilir: bu, bir indirme ilerleme göstergesi olarak kullanılabilir. En sonunda, yanıt tamamlanmış olduğunda, send() veya arka planda çalışan iş parçası readyState'ı 4'e ayarlar ve en son kez olay denetleyicisini tetikler.

XMLHttpRequest.setRequestHeader()

Sözdizimi

setRequestHeader(name, value)

name parametresi, ayarlanacak başlık adıdır. Bu parametre, boşluk, iki nokta ve satır başlarını içermemelidir.

value parametresi, başlık değeridir. Bu parametre, satır başlarını içermemelidir.

Açıklama

setRequestHeader() yöntemi, gönderilen bir HTTP istem başlığını belirler, bu başlık, send() çağrısı ile gönderilen istemde yer almalıdır. Bu yöntem sadece readyState 1 olduğunda çağrılabilir, örneğin open() çağrısı yapıldıktan sonra, send() çağrısı yapılmadan önce.

Belirtilen adlı başlık zaten belirlendiysse, bu başlık yeni değeri şu şekildedir: önceden belirlenen değer, virgül, boşluk ve bu çağrı tarafından belirlenen değer eklenir.

open() çağrısı kimlik doğrulama yetkilerini belirttiğinde, XMLHttpRequest otomatik olarak uygun bir Authorization istemci başlığı gönderir. Ancak, bu başlığı eklemek için setRequestHeader() kullanabilirsiniz. Benzer şekilde, Web sunucusu open() ile verilen URL ile ilgili cookie'yi zaten saklıyorsa, uygun Cookie veya Cookie2 başlıkları da otomatik olarak istemce dahil edilir. Bu cookie'leri başlığa eklemek için setRequestHeader() çağrısı yapabilirsiniz. XMLHttpRequest, User-Agent başlığı için de bir varsayılan değer sağlayabilir. Eğer bu şekilde davranırsa, bu başlığa verdiğiniz herhangi bir değer, varsayılan değerin sonuna eklenir.

Bazı istemci başlıkları XMLHttpRequest tarafından otomatik olarak bu yöntem yerine ayarlanır ve HTTP protokolüne uygun hale getirilir. Bu başlıklar arasında ajanla ilgili başlıklar da bulunmaktadır:

  • Host
  • Connection
  • Keep-Alive
  • Accept-charset
  • Accept-Encoding
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • Range