ใน "Pragmatic Ajax (เว็บไซต์แบบไดนามิกคงที่) ไพรเมอร์เว็บ 2.0" ฉันบังเอิญเห็นการแนะนำเกี่ยวกับสถานะของ Readystae ฉันรู้สึกว่าบทนำนี้เป็นจริงมาก การแปลมีดังนี้:
0: (ไม่ได้กำหนดค่า) วิธีการส่ง () ยังไม่ได้ถูกเรียกใช้
1: (โหลด) วิธีการส่ง () ถูกเรียกใช้แล้ว
2: (โหลด) วิธีการส่ง () เสร็จสิ้นการตอบสนองทั้งหมดที่ได้รับ
3: (โต้ตอบ) การตอบสนองกำลังถูกแยกวิเคราะห์
4: (เสร็จสมบูรณ์) การตอบสนองได้รับการแยกวิเคราะห์พร้อมสำหรับการเก็บเกี่ยว
0 - (ไม่ได้กำหนด) วิธีการส่ง () ยังไม่ได้รับการเรียก
1 - (โหลด) วิธีการส่ง () ถูกเรียกและคำขอกำลังส่ง
2 - (การโหลดเสร็จสมบูรณ์) วิธีการส่ง () ได้รับการดำเนินการแล้วและได้รับเนื้อหาการตอบกลับทั้งหมดแล้ว
3 - เนื้อหาการตอบสนอง (ปฏิสัมพันธ์) กำลังถูกแยกวิเคราะห์
4 - (เสร็จสมบูรณ์) การแยกวิเคราะห์เนื้อหาตอบกลับเสร็จสมบูรณ์และสามารถเรียกใช้กับลูกค้าได้
หนังสือเล่มอื่น ๆ ส่วนใหญ่คลุมเครือเกี่ยวกับห้ารัฐของ ReadeState ตัวอย่างเช่นใน "ฐานรากของ Ajax" "ชื่อ" ของรัฐนั้นแสดงอยู่ในตารางที่ 2-2 ในหนังสือ - สถานะของคำขอ ค่าที่เป็นไปได้ทั้งห้าคือ 0 = ไม่ได้รับการแก้ไข, 1 = การโหลด, 2 = โหลด, 3 = อินเทอร์แอคทีฟและ 4 = เสร็จสมบูรณ์ รายละเอียดของ 5 รัฐเหล่านี้ดูเหมือนจะไม่ได้กล่าวถึงใน "Ajax (เว็บไซต์คงที่แบบไดนามิก) ในการดำเนินการ" แม้ว่า "Ajax มืออาชีพ" จะไม่เป็นที่น่าพอใจ แต่ก็ยังมีข้อดี:
มีห้าค่าที่เป็นไปได้สำหรับ ReadeState:
0 (ไม่ได้กำหนดค่า): วัตถุได้ถูกสร้างขึ้น แต่ยังไม่ได้เรียกวิธี Open ()
1 (โหลด): วิธีการเปิด () ถูกเรียก แต่ยังไม่ได้ส่งคำขอ
2 (โหลด): มีการส่งคำขอแล้ว
3 (อินเทอร์แอคทีฟ) ได้รับการตอบกลับบางส่วนแล้ว
4 (เสร็จสมบูรณ์): ได้รับข้อมูลทั้งหมดแล้วและการเชื่อมต่อได้ถูกปิดแล้ว
มีห้าค่าที่เป็นไปได้สำหรับ ReadeState:
0 (uninitialized): (XML (มาตรฐานกำลังเข้าใกล้) HTTPREQUEST) วัตถุได้ถูกสร้างขึ้น แต่วิธีการเปิด () ยังไม่ได้รับการเรียก
1 (โหลด): วิธีการเปิด () ถูกเรียก แต่ยังไม่ได้ส่งคำขอ
2 (การโหลดเสร็จสมบูรณ์): มีการส่งคำขอแล้ว
3 (การโต้ตอบ): สามารถรับข้อมูลการตอบกลับได้
4 (เสร็จสมบูรณ์): ได้รับข้อมูลทั้งหมดแล้วและการเชื่อมต่อได้ถูกปิดแล้ว
ใน "การทำความเข้าใจ AJAX: การใช้ JavaScript เพื่อสร้างแอปพลิเคชันอินเทอร์เน็ตที่หลากหลาย" ตารางต่อไปนี้จะอธิบาย:
รหัสสถานะ ReadyState
สถานะของ XML (มาตรฐานใกล้เข้ามา) วัตถุ HTTPREQUEST
(0) ไม่ได้รับการกำหนดค่า
วัตถุถูกสร้างขึ้น แต่ไม่ได้เริ่มต้น (ไม่ได้เรียกวิธีการเปิด))
(XML (มาตรฐานกำลังเข้าใกล้) HTTPREQUEST) วัตถุได้ถูกสร้างขึ้น แต่ยังไม่ได้เริ่มต้น (วิธีการเปิดยังไม่ได้รับการเรียก)
(1) กำลังโหลด
โหลดวัตถุถูกสร้างขึ้น แต่วิธีการส่งไม่ได้ถูกเรียก
(XML (มาตรฐานกำลังเข้าใกล้) HTTPREQUEST) วัตถุได้ถูกสร้างขึ้น แต่วิธีการส่งยังไม่ได้รับการเรียก
(2) โหลด
วิธีการส่งได้ถูกเรียก แต่สถานะและส่วนหัวยังไม่พร้อมใช้งาน
วิธีการส่งถูกเรียกว่าสถานะ (การตอบกลับ HTTP) และส่วนหัวไม่สามารถใช้ได้
(3) การโต้ตอบ
การโต้ตอบข้อมูลบางอย่างได้รับ การเรียกคุณสมบัติ ResponseBody และ ResponsetExt ที่สถานะนี้เพื่อให้ได้ผลลัพธ์บางส่วนจะส่งคืนข้อผิดพลาดเนื่องจากสถานะและส่วนหัวการตอบกลับไม่พร้อมใช้งานอย่างสมบูรณ์
ได้รับข้อมูลบางอย่างแล้ว อย่างไรก็ตามหากคุณเรียกคุณสมบัติ ResponseBody และ ResponseText ในเวลานี้เพื่อรับผลลัพธ์บางอย่างข้อผิดพลาดจะเกิดขึ้นเนื่องจากสถานะและส่วนหัวการตอบสนองไม่พร้อมใช้งานอย่างสมบูรณ์
(4) เสร็จสิ้น
ได้รับข้อมูลทั้งหมดและข้อมูลที่สมบูรณ์มีอยู่ในคุณสมบัติ ResponseBody และ ResponsetExt
ได้รับข้อมูลทั้งหมดและสามารถแยกข้อมูลที่สมบูรณ์ในคุณสมบัติ ResponseBody และ ResponsetExt
ตามการแนะนำของ Five States of Readystate ในหนังสือข้างต้นฉันคิดว่า "Pragmatic Ajax (เว็บไซต์ไดนามิกคงที่) ไพรเมอร์เว็บ 2.0" มีอยู่ในสถานที่มากขึ้นเพราะมันกล่าวถึงปัญหาของการแยกวิเคราะห์ข้อมูลที่ได้รับซึ่งไม่ได้กล่าวถึงในหนังสือเล่มอื่น ๆ นี่คือเหตุผลที่ระยะ "(3) การโต้ตอบ" มีอยู่ในขั้นตอนการแปลงที่จำเป็นระหว่าง "(2) โหลดเสร็จสิ้น" และ "(4) เสร็จสิ้น" นั่นคืองานของมันคืออะไร โดยสรุปฉันคิดว่าวิธีการอธิบายในอุดมคติควรกำหนดสถานะเหล่านี้อย่างถูกต้องและเข้าใจได้ง่ายในรูปแบบการแสดงออกของ "สถานะ: งาน (วัตถุประสงค์) + กระบวนการ + ประสิทธิภาพ (หรือลักษณะ) สรุปการทดลองในปัจจุบันมีดังนี้:
คำอธิบายสถานะ ReadyState
(0) ไม่ได้เริ่มต้น
ในขั้นตอนนี้ให้ยืนยันว่า XML (มาตรฐานใกล้เข้ามามากขึ้น) วัตถุ HTTPREQUEST ถูกสร้างขึ้นและเตรียมความพร้อมสำหรับการเรียกใช้วิธี Open () สำหรับการไม่เข้าร่วม ค่า 0 หมายความว่าวัตถุนั้นมีอยู่แล้วมิฉะนั้นเบราว์เซอร์จะรายงานข้อผิดพลาด - วัตถุไม่มีอยู่
(1) โหลด
ในขั้นตอนนี้ XML (มาตรฐานกำลังใกล้เข้ามามากขึ้น) วัตถุ HTTPREQUEST เริ่มต้นนั่นคือวิธีการเปิด () จะถูกเรียกให้เสร็จสิ้นการตั้งค่าของสถานะวัตถุตามพารามิเตอร์ (วิธีการ URL จริง) และเรียกเมธอด Send () เพื่อเริ่มส่งคำขอไปยังเซิร์ฟเวอร์ ค่า 1 หมายความว่ามีการส่งคำขอไปยังเซิร์ฟเวอร์
(2) การโหลดเสร็จสมบูรณ์
ขั้นตอนนี้ได้รับข้อมูลการตอบกลับจากฝั่งเซิร์ฟเวอร์ แต่สิ่งที่ได้รับคือข้อมูลดั้งเดิมของการตอบสนองเซิร์ฟเวอร์และไม่สามารถใช้กับไคลเอนต์ได้โดยตรง ค่า 2 หมายความว่าได้รับข้อมูลการตอบกลับที่สมบูรณ์แล้ว และเตรียมพร้อมสำหรับขั้นตอนต่อไปของการแยกวิเคราะห์ข้อมูล
(3) การโต้ตอบ
ในขั้นตอนนี้ข้อมูลการตอบกลับฝั่งเซิร์ฟเวอร์ที่ได้รับจะถูกแยกวิเคราะห์ นั่นคือตามประเภท MIME ที่ส่งคืนโดยส่วนหัวการตอบกลับฝั่งเซิร์ฟเวอร์ข้อมูลจะถูกแปลงเป็นรูปแบบที่สามารถเข้าถึงได้ผ่านทาง ResponseBody, ResponseText หรือ ResponsESEXML สถานะ 3 หมายความว่าข้อมูลกำลังถูกแยกวิเคราะห์
(4) เสร็จสิ้น
ในขั้นตอนนี้ยืนยันว่าข้อมูลทั้งหมดถูกแยกวิเคราะห์เป็นรูปแบบที่มีให้กับลูกค้าและการแยกวิเคราะห์เสร็จสมบูรณ์ ค่า 4 หมายความว่าข้อมูลได้ถูกแยกวิเคราะห์แล้ว ข้อมูลสามารถรับได้ผ่านคุณสมบัติที่สอดคล้องกันของวัตถุ HTTPREQUEST (มาตรฐานกำลังใกล้เข้ามามากขึ้น)
โดยสรุปวงจรชีวิตของ XML ทั้งหมด (มาตรฐานกำลังใกล้เข้ามามากขึ้น) วัตถุ HTTPREQUEST ควรรวมขั้นตอนต่อไปนี้:
สร้าง - เริ่มต้นคำขอ - ส่งคำขอ - รับข้อมูล - วิเคราะห์ข้อมูล - เสร็จสิ้น
ในแอปพลิเคชันเฉพาะการชี้แจงความหมายของห้าสถานะของ ReadeState (XML (มาตรฐานกำลังเข้าใกล้) และขั้นตอนต่าง ๆ ของวงจรชีวิตของวัตถุ HTTPREQUEST) สามารถกำจัดความลึกลับของแกนกลางของ AJAX (เว็บไซต์คงที่) ในการเรียนรู้และเสริมสร้างความมั่นใจในตนเอง
ตัวอย่างเช่นโดยทำตามตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
// ประกาศอาร์เรย์
var state = ["การเริ่มต้น ... "
“ การเริ่มต้นคำขอ…ประสบความสำเร็จ!
ส่งคำขอ ... ",
"ความสำเร็จ!
รับข้อมูล ... ",
"เสร็จ!
วิเคราะห์ข้อมูล ... ",
"เสร็จ!
-
// ตัวอย่างรหัสภายในของฟังก์ชันการโทรกลับ
ถ้า (XML (มาตรฐานใกล้เข้ามา) http.readystate == 4)
-
var span = document.createElement ("span");
span.innerhtml = สถานะ [XML (มาตรฐานใกล้เข้ามา) http.readystate];
document.body.appendchild (ช่วง);
if (XML (มาตรฐานใกล้เข้ามา) http.status == 200)
-
var xml (มาตรฐานใกล้เข้ามามากขึ้น) doc = xml (มาตรฐานใกล้เข้ามา) http.responsexml (มาตรฐานกำลังใกล้เข้ามา);
// รหัสอื่น ๆ
-
// อย่าลืมทำลายมันเพื่อป้องกันการรั่วไหลของหน่วยความจำ
XML (มาตรฐานใกล้เข้ามามากขึ้น) http = null;
}อื่น{
var span = document.createElement ("span");
span.innerhtml = สถานะ [XML (มาตรฐานใกล้เข้ามา) http.readystate];
document.body.appendchild (ช่วง);
} ผลลัพธ์มีดังนี้:
เริ่มต้นคำขอ ... ประสบความสำเร็จ!
ส่งคำขอ ... ประสบความสำเร็จ!
รับข้อมูล ... เสร็จสมบูรณ์!
วิเคราะห์ข้อมูล ... เสร็จสมบูรณ์!
เป็นเรื่องง่ายที่จะเข้าใจว่า XML (มาตรฐานกำลังเข้าใกล้) วัตถุ HTTPRequest กำลังทำอะไรอยู่ในทุกขั้นตอน ดังนั้นจึงเป็นเรื่องง่ายที่จะมีความเข้าใจที่เรียบง่ายและชัดเจนเกี่ยวกับส่วนหลักของ AJAX (เว็บไซต์แบบไดนามิกคงที่)