readystates ที่แตกต่างกันใน XMLHttpRequest หมายถึงอะไรและฉันจะใช้มันได้อย่างไร


113

XMLHttpRequestมี 5 readyStateวินาทีและฉันใช้เพียง 1 ในนั้น (อันสุดท้าย,4 )

อื่น ๆ มีไว้ทำอะไรและฉันสามารถใช้งานได้จริงอะไรบ้าง?

คำตอบ:


172

รายการreadyStateค่าทั้งหมดคือ:

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 )

ในทางปฏิบัติคุณแทบไม่เคยใช้เลยยกเว้น 4.

การใช้งาน XMLHttpRequest บางอย่างอาจช่วยให้คุณเห็นการตอบสนองที่ได้รับบางส่วนresponseTextเมื่อใดreadyState==3แต่สิ่งนี้ไม่ได้รับการสนับสนุนในระดับสากลและไม่ควรพึ่งพา


5
ข้อผิดพลาดในการถ่ายโอนยังคงอัปเดต readyState เป็น 4 อย่างไรก็ตามการถ่ายโอนที่ถูกขัดจังหวะอย่างสมบูรณ์จะรีเซ็ต readyState เป็น 0 ดังนั้นข้อผิดพลาดในการถ่ายโอนซึ่งเป็นผลมาจากการเปลี่ยนเส้นทางไม่ใช่ "ข้อผิดพลาด" จริงๆและคุณสามารถเลือกที่จะละเว้นการบันทึกได้ / รายงานข้อผิดพลาดหาก readyState ของ xhr เป็น 0 มันค่อนข้างบอบบางและระยะทางของคุณอาจแตกต่างกันไปขึ้นอยู่กับว่าการบันทึกทุกเหตุการณ์ / ข้อผิดพลาดเป็นสิ่งที่ "ต้องมี" หรือ "ดีที่จะมี" หากเป็นอย่างหลังคุณสามารถสูญเสียเหตุการณ์ที่หายากซึ่งอาจเป็นข้อผิดพลาดพร้อมกับ readyState ของ 0 ได้
Greg Pettit

2
+1 ถึง @MattBianco สำหรับคำแนะนำของเขา ฉันต้องการเพิ่มว่า Mozilla Developer Network MDNเป็นหนึ่งในไซต์อ้างอิงที่ได้รับความนิยมและน่าเชื่อถือที่สุดสำหรับความต้องการ JavaScript / HTML / CSS ทั้งหมดของคุณ เมื่อทำการค้นหาโดย Google ให้เพิ่มคำค้นหาของคุณด้วย "mdn" แล้วคุณจะไม่ต้องปวดหัว
DondeEstaMiCulo

@GregPettit เราสามารถใช้ readystate 0 ได้ไหมโดยไม่มีการเชื่อมต่ออินเทอร์เน็ตหรือมีเหตุผลใดที่ "ไม่ได้เริ่มต้นคำขอ"
Vishal Sharma

4
ฉันไม่แน่ใจ @vishalsharma - อย่างที่ฉันจำได้ว่า readystate คือ 0 ตราบใดที่คำขอไม่ได้เริ่มต้น หลังจากนั้น "เสร็จสิ้น" อื่น ๆ (ไม่ว่าจะด้วยความสำเร็จหรือข้อผิดพลาด) จะอัปเดต readystate เป็น 4 ดังนั้นการสูญเสียอินเทอร์เน็ตหลังจากเริ่มการถ่ายโอนจะพลิกเป็น 4 ไม่ใช่กลับไปที่ 0 หากไม่เคยมีอินเทอร์เน็ตเมื่อการถ่ายโอน พยายามแล้วควรยังคงเป็น 0; จะย้ายไปที่ 1 หลังจากการจับมือกันเท่านั้น
Greg Pettit

คำอธิบายสำหรับ readyState 2 ไม่ถูกต้อง - หรืออย่างน้อยก็ทำให้เข้าใจผิดอย่างสิ้นเชิง ส่งคำขอของ Shure แล้ว แต่สถานะเหล่านั้นบอกว่าได้รับส่วนหัวการตอบกลับขั้นสุดท้ายทั้งหมดแล้ว
inta

32

คำตอบของkieronประกอบด้วย w3schools ref. ซึ่งไม่มีใครพึ่งพา คำตอบของBobinceให้ลิงก์ซึ่งบอกถึงการใช้งาน IE แบบเนทีฟ

ดังนั้นนี่คือเอกสารต้นฉบับที่ยกมาเพื่อทำความเข้าใจอย่างถูกต้องว่า readystate หมายถึงอะไร:

วัตถุ XMLHttpRequest สามารถอยู่ในหลายสถานะ แอตทริบิวต์ readyState ต้องคืนสถานะปัจจุบันซึ่งต้องเป็นค่าใดค่าหนึ่งต่อไปนี้:

UNSENT (ค่าตัวเลข 0)
สร้างวัตถุแล้ว

OPENED (ค่าตัวเลข 1) เรียก
วิธีการเปิด () สำเร็จแล้ว ในระหว่างการร้องขอสถานะนี้ส่วนหัวสามารถตั้งค่าโดยใช้ setRequestHeader () และสามารถร้องขอได้โดยใช้เมธอด send ()

HEADERS_RECEIVED (ค่าตัวเลข 2)
มีการติดตามการเปลี่ยนเส้นทางทั้งหมด (ถ้ามี) และได้รับส่วนหัว HTTP ทั้งหมดของการตอบกลับสุดท้ายแล้ว ขณะนี้มีสมาชิกการตอบสนองหลายอย่างของอ็อบเจ็กต์

กำลังโหลด (ค่าตัวเลข 3)
กำลังรับเนื้อหาเอนทิตีการตอบกลับ

เสร็จสิ้น (ค่าตัวเลข 4)
การถ่ายโอนข้อมูลเสร็จสมบูรณ์หรือเกิดข้อผิดพลาดระหว่างการถ่ายโอน (เช่นการเปลี่ยนเส้นทางแบบไม่มีที่สิ้นสุด)

โปรดอ่านที่นี่: คำอธิบาย W3C ของ ReadyState


@CharlesWood ความท้าทายสำหรับฉันอยู่ที่นี่ตัวแก้ไข stackoverflow markdown ไม่ยอมรับการอ้างถึง w3c .. ตรวจสอบด้วยเหตุนี้ฉันจึงใส่ URL สั้น ๆ จาก goo.gl .... ฉันไม่เข้าใจว่าทำไมมันไม่อนุญาตให้ฉันใส่โดยตรง w3c url ...
Vishal Sharma

ฉันเพิ่งลองทำในแซนด์บ็อกซ์และดูเหมือนว่าจะได้ผล
Charles Wood

22

เอกสารสรุปต้นฉบับ

0, 1และ2เพียงติดตามวิธีการหลายวิธีการที่จำเป็นเพื่อให้คำขอของคุณได้เรียกว่าเพื่อให้ห่างไกล

3 บอกคุณว่าการตอบสนองของเซิร์ฟเวอร์เริ่มเข้ามาแล้ว แต่เมื่อคุณใช้ไฟล์ XMLHttpRequestออบเจ็กต์จากหน้าเว็บแทบไม่มีอะไรเลย (*) คุณสามารถทำอะไรกับข้อมูลนั้นได้เนื่องจากคุณไม่สามารถเข้าถึงคุณสมบัติเพิ่มเติมที่อนุญาต คุณอ่านข้อมูลบางส่วน

readyState 4เป็นคนเดียวที่มีความหมาย

(*: เกี่ยวกับการใช้งานที่เป็นไปได้เพียงอย่างเดียวที่ฉันคิดได้สำหรับการตรวจสอบ readyState 3คือมันส่งสัญญาณชีวิตบางรูปแบบเมื่อสิ้นสุดเซิร์ฟเวอร์ดังนั้นคุณอาจเพิ่มระยะเวลาในการรอการตอบกลับทั้งหมดเมื่อคุณได้รับ)


1

onreadystatechange เก็บฟังก์ชัน (หรือชื่อของฟังก์ชัน) ที่จะเรียกโดยอัตโนมัติทุกครั้งที่คุณสมบัติ readyState เปลี่ยนแปลง readyState ถือสถานะของ XMLHttpRequest การเปลี่ยนแปลงจาก 0 เป็น 4:

0: คำขอไม่ได้เริ่มต้น

1: สร้างการเชื่อมต่อเซิร์ฟเวอร์แล้ว

2: ได้รับคำขอ

3: การร้องขอการประมวลผล

4: คำขอเสร็จสิ้นและการตอบกลับพร้อมแล้ว

สถานะ 200: "ตกลง"

404: ไม่พบหน้า


0
  • 0: สร้างไคลเอนต์ UNSENT แล้ว เปิด () ยังไม่ถูกเรียก
  • 1: OPENED open () ถูกเรียก
  • 2: HEADERS_RECEIVED send () ถูกเรียกและส่วนหัวและสถานะพร้อมใช้งาน
  • 3: กำลังโหลดการดาวน์โหลด; responseText เก็บข้อมูลบางส่วน
  • 4: DONE การดำเนินการเสร็จสมบูรณ์

(จาก https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.