Ajax ได้รับความนิยมอย่างมากในช่วงไม่กี่ปีที่ผ่านมา และแก่นแท้ของ Ajax คือ XMLHttpRequest ซึ่งเป็นการใช้ออบเจ็กต์ XMLHttpRequest ฝั่งไคลเอ็นต์ เมื่อเปรียบเทียบกับ Ajax แล้ว XMLHTTP ฝั่งเซิร์ฟเวอร์จะใช้วัตถุ XMLHttpRequest บนฝั่งเซิร์ฟเวอร์ แม้ว่าการใช้คำขอแบบอะซิงโครนัสบนฝั่งเซิร์ฟเวอร์จะไม่สะดวกกว่า แต่เนื่องจากเป็นส่วนประกอบที่สามารถส่งคำขอ HTTP บนฝั่งเซิร์ฟเวอร์ได้ การเรียนรู้เกี่ยวกับเรื่องนี้จึงไม่เสียหาย
ที่นี่ ฉันกำลังพูดถึงการใช้ XMLHttpRequest ฝั่งเซิร์ฟเวอร์ในสภาพแวดล้อม ASP และใช้ JScript เป็นภาษาสำหรับโค้ดสาธิต ดังนั้น คุณต้องเข้าใจ ASP และ JScript
โดยปกติแล้ว XMLHTTP ฝั่งเซิร์ฟเวอร์จะใช้เพื่อรับหน้าเว็บหรือเนื้อหาอื่นๆ จากโฮสต์ระยะไกล โดยทั่วไประบบการรวม News จะใช้ออบเจ็กต์ XMLHTTP ฝั่งเซิร์ฟเวอร์เพื่อรับเนื้อหาของฟีดที่จะรวบรวม จากนั้นใช้ออบเจ็กต์ XMLDOM เพื่อวิเคราะห์เนื้อหาของ ฟีดและเรียกชื่อข่าว ผู้แต่ง เนื้อหา และข้อมูลอื่นๆ จะถูกจัดเก็บไว้ในฐานข้อมูล จากนั้นจึงแสดงข่าวจากแหล่งข้อมูลต่างๆ เข้าด้วยกัน จับกุ้งเป็นตัวรวบรวมข่าว แต่ไม่ได้เขียนด้วย ASP :)
ใน ASP เราสามารถใช้โค้ดต่อไปนี้เพื่อสร้างวัตถุ ServerXMLHTTP และวัตถุนี้เป็นพื้นฐานสำหรับการดำเนินการทั้งหมดที่เราทำบนฝั่งเซิร์ฟเวอร์
คัดลอกรหัสรหัสดังต่อไปนี้:
var xmlhttp = ActiveXObject ใหม่ (MSXML2.ServerXMLHTTP.5.0);
ขั้นแรก มาดูวิธีการที่มีประโยชน์มากขึ้นของออบเจ็กต์ ServerXMLHTTP:
1. ยกเลิก วิธีการนี้จะใช้ในการยกเลิกการร้องขอ XMLHTTP หากวัตถุ XMLHTTP ส่งคำขอแบบอะซิงโครนัส หากคำขอยังคงไม่ส่งคืนหลังจากผ่านไประยะหนึ่ง คุณสามารถใช้วิธีนี้เพื่อยกเลิกการร้องขอ
2. getAllResponseHeaders ค่าที่ส่งคืนของเมธอดนี้คือสตริง ซึ่งเทียบเท่ากับส่วนหัวของคำขอ HTTP โดยไม่มีเมธอดคำขอ, URI และข้อมูลเวอร์ชันของโปรโตคอล
3. getResponseHeader วิธีการนี้ใช้เพื่อรับข้อมูลส่วนหัวที่ระบุ วิธีที่มีประโยชน์มากกว่าคือการรับประเภทเนื้อหา ผู้อ้างอิง ฯลฯ ของข้อมูลที่ส่งคืน
4. open เริ่มต้นคำขอโดยใช้วิธีการร้องขอที่ระบุ URI วิธีการซิงโครไนซ์ ข้อมูลการรับรองความถูกต้อง ฯลฯ
5. send ส่งคำขอ HTTP และรอข้อมูลตอบกลับ โปรดทราบว่าหากคำขอถูกส่งในลักษณะซิงโครนัส วิธีการส่งจะไม่ส่งคืนทันทีหลังจากถูกเรียก แต่จะรอจนกว่าคำขอจะเสร็จสิ้นเมื่อใด เมื่อร้องขอแบบอะซิงโครนัสก็จะส่งคืนทันที นอกจากนี้ วิธีการส่งยังมีเนื้อหาพารามิเตอร์ที่เป็นทางเลือก ซึ่งแสดงถึงข้อมูลที่จะส่ง ซึ่งจะมีประโยชน์มากกว่าเมื่อใช้วิธี POST
6. setTimeout ตั้งค่าการหมดเวลาสี่ครั้งของออบเจ็กต์ ServerXMLHTTP ซึ่งได้แก่: การแก้ไขชื่อโดเมน การเชื่อมต่อกับเซิร์ฟเวอร์ การส่งข้อมูล และการรับการตอบกลับ คุณสามารถควบคุมอ็อบเจ็กต์ ServerXMLHTTP ได้โดยการตั้งค่าช่วงหมดเวลาที่สอดคล้องกันเพื่อป้องกันไม่ให้ ServerXMLHTTP ไม่สามารถส่งคืนได้ทันเวลา และทำให้โปรแกรมหยุดการตอบสนอง
7. setRequestHeader ตั้งค่าส่วนหัวของคำขอ ในไคลเอนต์ XMLHttpRequest มักจะใช้เพื่อตั้งค่าประเภทข้อมูลของคำขอหรือระบุวิธีการร้องขอ ฯลฯ ตัวอย่างเช่น jquery จะเพิ่มตัวระบุส่วนหัว X-Request-With เพื่อระบุว่าคำขอมาจากวัตถุ XMLHttpRequest ออกเพื่ออำนวยความสะดวกให้เซิร์ฟเวอร์ดำเนินการที่เกี่ยวข้อง
8. waitForResponse เมื่อส่งคำขอแบบอะซิงโครนัส คุณสามารถใช้วิธีนี้เพื่อควบคุมกระบวนการร้องขอได้ ในสคริปต์ฝั่งเซิร์ฟเวอร์ คุณไม่สามารถใช้ฟังก์ชันการโทรกลับโดยตรงเพื่อควบคุมคำขอแบบอะซิงโครนัสเหมือนกับที่ไคลเอ็นต์ทำ และไม่มีฟังก์ชันที่เกี่ยวข้องในการใช้โปรแกรมเพื่อเข้าสู่โหมดสลีปในช่วงระยะเวลาหนึ่ง ดังนั้น เพื่อรอการร้องขอ return เราสามารถใช้วิธีนี้เพื่อรอช่วงระยะเวลาหนึ่งได้
นอกจากนี้ยังมีวิธีการอื่นๆ เช่น getOption, setOption, setProxy เป็นต้น วิธีการเหล่านี้ไม่ค่อยได้ใช้ ดังนั้นจึงจะไม่แนะนำเพื่อนๆ ที่ต้องการทราบข้อมูลเพิ่มเติมสามารถอ้างอิงถึง MSDN ได้
ต่อไปเรามาดูคุณสมบัติของวัตถุ ServerXMLHTTP:
1. onreadystatechange ฟังก์ชันการเรียกกลับเมื่อสถานะของวัตถุ XMLHTTP เปลี่ยนแปลง คุณลักษณะนี้วางรากฐานสำหรับการดำเนินการแบบอะซิงโครนัส ช่วยให้โปรแกรมทราบว่าการดำเนินการ XMLHTTP เสร็จสมบูรณ์แล้วหรือไม่โดยไม่ต้องสอบถามสถานะของวัตถุ XMLHTTP
2. สถานะของวัตถุ readyState XMLHTTP มี 5 ค่า ตั้งแต่ 0 ถึง 4 ซึ่งแสดงถึง:
0 - ไม่ได้เตรียมใช้งาน สถานะของออบเจ็กต์เมื่อเพิ่งสร้างขึ้นโดยใช้ ActiveXObject ใหม่ (MSXML.ServerXMLHTTP.5.0)
1 - กำลังโหลด ในขณะนี้ มีการเรียกใช้วิธีการเปิด แต่ยังไม่ได้ใช้วิธีการส่งเพื่อส่งข้อมูล
2 - โหลดแล้ว มีการเรียกใช้วิธีการส่งเพื่อส่งข้อมูล แต่ยังไม่มีสตรีมการตอบสนอง
3 - การโต้ตอบและการรับข้อมูล ในขณะนี้ คุณสามารถใช้แอตทริบิวต์ responseBody และ responseText เพื่อรับส่วนหนึ่งของข้อมูลที่ได้รับ
4 - กรอกคำขอ ได้รับข้อมูลทั้งหมดแล้ว
โดยปกติ เราจำเป็นต้องระบุสถานะ 4 เท่านั้น ในขณะนี้ ข้อมูลทั้งหมดได้รับการโหลดแล้ว และสามารถรับข้อมูลที่ต้องการได้โดยใช้แอตทริบิวต์ responseBody หรือ responseText
3. รหัสสถานะการตอบสนอง HTTP ซึ่งควรเป็น 200 ภายใต้สถานการณ์ปกติ หากไม่มีทรัพยากรที่ร้องขอ 404 จะถูกส่งกลับ มีรหัสสถานะอื่น ๆ เช่นข้อผิดพลาดของเซิร์ฟเวอร์ 500 เป็นต้น
4. statusText ข้อความสถานะการตอบสนอง HTTP ใช้เพื่ออธิบายความหมายของรหัสสถานะการตอบสนอง เช่น OK ใน 200 OK, Not Found ใน 404 Not Found
5. responseBody คืออาร์เรย์ไบต์ของข้อมูลตอบกลับ ซึ่งสามารถใช้ได้โดยตรงใน VBScript แต่จำเป็นต้องแปลงเป็น JScript
6. responseText รับข้อมูลตอบกลับในรูปแบบข้อความ
7. responseXML ส่งคืนข้อมูลตอบกลับเป็นวัตถุ XMLDOM ซึ่งมีประโยชน์อย่างยิ่งเมื่อข้อมูลที่ร้องขอเป็นเอกสาร XML
8. วัตถุสตรีมการตอบสนอง responseStream คุณลักษณะนี้ไม่ได้ใช้กันทั่วไป