XMLHttpRequest'teki farklı okuma durumları ne anlama geliyor ve bunları nasıl kullanabilirim?


113

XMLHttpRequest5 readyStates var ve ben sadece 1 tanesini kullanıyorum (sonuncusu 4).

Diğerleri ne için ve bunları hangi pratik uygulamalarda kullanabilirim?

Yanıtlar:


172

readyStateDeğerlerin tam listesi :

State  Description
0      The request is not initialized
1      The request has been set up
2      The request has been sent
3      The request is in process
4      The request is complete

( https://www.w3schools.com/js/js_ajax_http_response.asp adresinden )

Pratikte 4 dışında neredeyse hiçbirini kullanmazsınız.

Bazı XMLHttpRequest uygulamaları, responseTextne zaman kısmen alınan yanıtları görmenize izin verebilir readyState==3, ancak bu evrensel olarak desteklenmez ve buna güvenilmemelidir.


5
Aktarmadaki hatalar readyState'i 4'e güncellemeye devam eder. Ancak, tamamen kesintiye uğramış bir aktarım readyState'i 0'a sıfırlayacaktır. Bu nedenle, aktarımdaki bir yeniden yönlendirmenin sonucu olan bir hata gerçekten bir "hata" değildir ve günlük kaydını yok saymayı seçebilirsiniz. / xhr'nin readyState'i 0 ise hatayı bildirme. Bu biraz kırılgandır ve her olayı / hatayı günlüğe kaydetmenin bir "sahip olunması gereken" veya "olması güzel" olmasına bağlı olarak değişebilir. İkincisi ise, 0'ın hazır Durumu ile birlikte bir hata olabilecek nadir olayı kaybetmeyi göze alabilirsiniz.
Greg Pettit

2
Tavsiyesi için @MattBianco'ya +1. Ayrıca Mozilla Developer Network MDN'nin , tüm JavaScript / HTML / CSS ihtiyaçlarınız için piyasadaki en popüler ve güvenilir referans sitelerinden biri olduğunu da eklemek isterim . Bir Google araması yaparken, sorgunuzun başına "mdn" ekleyin ve baş ağrısından kurtulursunuz.
DondeEstaMiCulo

@GregPettit, readystate 0'ı internet bağlantısı olmadan kullanabilir miyiz veya "İstek başlatılmadı" için herhangi bir neden olabilir mi
Vishal Sharma

4
Emin değilim, @vishalsharma - hatırladığım kadarıyla, istek başlatılmadığı sürece okuma durumu 0'dır. Bundan sonra, başka herhangi bir "tamamlanma" (başarılı veya hatalı), okuma durumunu 4'e güncelleyecektir. Dolayısıyla, aktarım başladıktan sonra internetin kaybedilmesi, onu 4'e çevirecektir, 0'a geri döndürmeyecektir. Aktarım sırasında internet hiç olmadıysa denendi, hala 0'da olmalı; tokalaşmadan sonra yalnızca 1'e geçecektir.
Greg Pettit

ReadyState 2'nin açıklaması yanlış veya en azından tamamen yanıltıcı. Talebin gönderildiğinden emin olun, ancak bu eyalet aslında tüm son yanıt başlıklarının alındığını söylüyor.
inta

32

kieron'un cevabı w3schools ref içerir. kimsenin güvenmediği Bobince cevabı, aslında IE'nin yerel uygulamasını anlatan bağlantı veriyor.

öyleyse işte readystate'in neyi temsil ettiğini doğru bir şekilde anlamak için alıntılanan orijinal belgeler:

XMLHttpRequest nesnesi birkaç durumda olabilir. ReadyState özelliği, aşağıdaki değerlerden biri olması gereken mevcut durumu döndürmelidir:

UNSENT (sayısal değer 0)
Nesne oluşturuldu.

AÇILDI (sayısal değer 1)
open () yöntemi başarıyla çağrıldı. Bu durum sırasında istek başlıkları setRequestHeader () kullanılarak ayarlanabilir ve istek send () yöntemi kullanılarak yapılabilir.

HEADERS_RECEIVED (sayısal değer 2)
Tüm yönlendirmeler (varsa) izlendi ve son yanıtın tüm HTTP başlıkları alındı. Nesnenin birkaç yanıt üyesi artık kullanılabilir.

LOADING (sayısal değer 3)
Yanıt varlık gövdesi alınıyor.

YAPILDI (sayısal değer 4)
Veri aktarımı tamamlandı veya aktarım sırasında bir şeyler ters gitti (örn. Sonsuz yeniden yönlendirmeler).

Lütfen buradan okuyun: W3C ReadyState Açıklaması


@CharlesWood, benim için meydan okuma buradaydı stackoverflow markdown editörü w3c'ye başvurmayı kabul etmiyor .. bu yüzden goo.gl'den kısa bir url koydum .... neden doğrudan koymama izin vermediğini anlamıyorum w3c url ...
Vishal Sharma

Huh, bunu kum havuzunda denedim ve işe yaradı.
Charles Wood

22

Orijinal kesin belgeler

0, 1Ve 2yalnızca şu ana kadar aradım bir istek yapmak için gerekli yöntemlerin kaç parça.

3size sunucunun yanıtının gelmeye başladığını söyler. Ancak XMLHttpRequestnesneyi bir web sayfasından kullanırken, bu bilgilerle yapabileceğiniz neredeyse hiçbir şey (*) yoktur, çünkü izin veren genişletilmiş özelliklere erişiminiz yoktur. kısmi verileri okumalısınız.

readyState 4, herhangi bir anlamı olan tek kişidir.

(*: readyState'i kontrol etmek için aklıma gelen tek olası kullanım 3, sunucu sonunda bir tür yaşam sinyali vermesidir , böylece aldığınızda tam bir yanıt için beklediğiniz süreyi muhtemelen artırabilirsiniz.)


1

onreadystatechange readyState özelliği her değiştiğinde otomatik olarak çağrılacak bir işlevi (veya bir işlevin adını) kaydeder readyState XMLHttpRequest'in durumunu tutar. 0'dan 4'e değişiklikler:

0: istek başlatılmadı

1: sunucu bağlantısı kuruldu

2: istek alındı

3: işleme isteği

4: istek tamamlandı ve yanıt hazır

durum 200: "Tamam"

404 Sayfa Bulunamadı


0
  • 0: UNSENT İstemci oluşturuldu. open () henüz çağrılmadı.
  • 1: AÇILDI açık () çağrıldı.
  • 2: HEADERS_RECEIVED send () çağrıldı ve üstbilgiler ve durum mevcut.
  • 3: YÜKLENİYOR İndiriliyor; responseText kısmi verileri tutar.
  • 4: YAPILDI İşlem tamamlandı.

(Https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState adresinden)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.