Các trạng thái sẵn sàng khác nhau trong XMLHttpRequest nghĩa là gì và tôi có thể sử dụng chúng như thế nào?


113

XMLHttpRequestcó 5 readyStates, và tôi chỉ sử dụng 1 trong số chúng (cái cuối cùng, 4).

Những cái khác để làm gì và tôi có thể sử dụng chúng trong những ứng dụng thực tế nào?

Câu trả lời:


172

Danh sách đầy đủ các readyStategiá trị là:

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

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

Trong thực tế, bạn hầu như không bao giờ sử dụng bất kỳ cái nào trong số chúng ngoại trừ 4 cái.

Một số triển khai XMLHttpRequest có thể cho phép bạn xem các phản hồi đã nhận được một phần vào responseTextthời điểm nào readyState==3, nhưng điều này không được hỗ trợ phổ biến và không nên dựa vào.


5
Các lỗi trong quá trình chuyển vẫn cập nhật readyState lên 4. Tuy nhiên, quá trình chuyển hoàn toàn bị gián đoạn sẽ đặt lại readyState về 0. Vì vậy, lỗi trong quá trình chuyển do chuyển hướng không thực sự là "lỗi" và bạn có thể chọn bỏ qua việc ghi nhật ký / báo cáo lỗi nếu readyState của xhr là 0. Nó hơi mong manh và quãng đường của bạn có thể thay đổi tùy thuộc vào việc ghi nhật ký mọi sự kiện / lỗi là "phải có" hay "tốt là có". Nếu đó là sau này, bạn có thể đủ khả năng để mất sự kiện hiếm hoi mà có thể là một lỗi cùng readyState của 0.
Greg Pettit

2
+1 tới @MattBianco để được tư vấn. Tôi cũng muốn nói thêm rằng Mạng nhà phát triển Mozilla MDN được cho là một trong những trang web tham khảo phổ biến và đáng tin cậy nhất hiện có cho mọi nhu cầu về JavaScript / HTML / CSS của bạn. Khi thực hiện tìm kiếm trên google, hãy thêm truy vấn của bạn với "mdn" và bạn sẽ đỡ đau đầu cho mình.
DondeEstaMiCulo

@GregPettit, chúng ta có thể sử dụng readystate 0 không, không có kết nối internet hoặc có bất kỳ lý do nào tồn tại trong đó "Yêu cầu không được khởi tạo"
Vishal Sharma

4
Tôi không chắc, @vishalsharma - như tôi nhớ lại, trạng thái sẵn sàng là 0 miễn là yêu cầu không được khởi tạo. Sau đó, bất kỳ "hoàn thành" nào khác (do thành công hoặc do lỗi) sẽ cập nhật trạng thái sẵn sàng lên 4. Vì vậy, việc mất internet sau khi quá trình chuyển bắt đầu sẽ chuyển nó thành 4, không trở về 0. Nếu chưa bao giờ có internet khi chuyển. đã cố gắng, nó vẫn phải ở mức 0; nó sẽ chỉ chuyển sang 1 sau khi bắt tay.
Greg Pettit

Lời giải thích cho readyState 2 là sai - hoặc ít nhất là hoàn toàn sai lệch. Shure yêu cầu đã được gửi, nhưng những trạng thái đó thực sự nói rằng tất cả các tiêu đề phản hồi cuối cùng đã được nhận.
inta

32

câu trả lời của kieron chứa w3schools ref. mà không ai dựa vào, câu trả lời của bobince đưa ra liên kết, thực sự cho biết việc triển khai bản địa của IE,

vì vậy đây là tài liệu gốc được trích dẫn để hiểu đúng những gì readystate đại diện:

Đối tượng XMLHttpRequest có thể ở một số trạng thái. Thuộc tính readyState phải trả về trạng thái hiện tại, phải là một trong các giá trị sau:

UNSENT (giá trị số 0)
Đối tượng đã được xây dựng.

OPENED (giá trị số 1)
Phương thức open () đã được gọi thành công. Trong trạng thái này, tiêu đề yêu cầu có thể được đặt bằng cách sử dụng setRequestHeader () và yêu cầu có thể được thực hiện bằng phương thức send ().

HEADERS_RECEIVED (giá trị số 2)
Tất cả các chuyển hướng (nếu có) đã được tuân theo và tất cả các tiêu đề HTTP của phản hồi cuối cùng đã được nhận. Một số thành viên phản hồi của đối tượng hiện đã có sẵn.

LOADING (giá trị số 3)
Đang nhận phần thân thực thể phản hồi.

XONG (giá trị số 4)
Quá trình truyền dữ liệu đã hoàn tất hoặc đã xảy ra sự cố trong quá trình truyền (ví dụ: chuyển hướng vô hạn).

Vui lòng đọc ở đây: W3C Giải thích về ReadyState


@CharlesWood, thử thách đối với tôi là ở đây trình soạn thảo đánh dấu stackoverflow sẽ không chấp nhận tham chiếu đến w3c .. hãy kiểm tra do đó tôi đặt url ngắn từ goo.gl .... tôi không hiểu tại sao nó không cho phép tôi trực tiếp đưa url w3c ...
Vishal Sharma

Huh, tôi vừa thử nó trong hộp cát và nó có vẻ hoạt động.
Charles Wood,

22

Tài liệu cuối cùng ban đầu

0, 12chỉ theo dõi có bao nhiêu trong những phương pháp cần thiết để thực hiện một yêu cầu mà bạn đã gọi cho đến nay.

3cho bạn biết rằng phản hồi của máy chủ đã bắt đầu đến. Nhưng khi bạn đang sử dụng XMLHttpRequestđối tượng từ một trang web, bạn hầu như không thể làm gì (*) với thông tin đó, vì bạn không có quyền truy cập vào các thuộc tính mở rộng cho phép bạn để đọc dữ liệu từng phần.

readyState 4là cái duy nhất có ý nghĩa.

(*: về cách sử dụng có thể hình dung duy nhất mà tôi có thể nghĩ đến để kiểm tra readyState 3là nó báo hiệu một số dạng sống ở cuối máy chủ, vì vậy bạn có thể tăng khoảng thời gian chờ phản hồi đầy đủ khi nhận được.)


1

onreadystatechange Lưu trữ một hàm (hoặc tên của một hàm) để được gọi tự động mỗi khi thuộc tính readyState thay đổi readyState Giữ trạng thái của XMLHttpRequest. Các thay đổi từ 0 thành 4:

0: yêu cầu không được khởi tạo

1: kết nối máy chủ được thiết lập

2: nhận được yêu cầu

3: yêu cầu xử lý

4: yêu cầu hoàn thành và phản hồi đã sẵn sàng

trạng thái 200: "OK"

Lôi 404 Không Tim Được Trang


0
  • 0: Ứng dụng khách UNSENT đã được tạo. open () chưa được gọi.
  • 1: Mở open () đã được gọi.
  • 2: HEADERS_RECEIVED send () đã được gọi, tiêu đề và trạng thái có sẵn.
  • 3: Tải xuống TẢI TRỌNG; responseText giữ một phần dữ liệu.
  • 4: XONG Thao tác hoàn tất.

(Từ https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.