การใช้งานการโทรกลับโดยทั่วไปนั้นค่อนข้างง่าย การอ้างถึงความช่วยเหลือและตัวอย่างของ msdn โดยตรงก็เพียงพอแล้ว แต่ถ้าคุณต้องการใช้งานอย่างดีและแม่นยำจริงๆ หรือต้องการพัฒนาส่วนประกอบของเว็บบางส่วนตามกลไกการโทรกลับ คุณต้องมีความเข้าใจในเชิงลึกเกี่ยวกับกลไกการใช้งานการโทรกลับก่อน ในบทความนี้ Teddy จะทำงานร่วมกับคุณเพื่อวิเคราะห์กลไกการร้องขอและข้อเสนอแนะทั้งหมดของการโทรกลับ ฉันเชื่อว่าการช่วยให้คุณใช้การโทรกลับได้ดีขึ้นจะเป็นประโยชน์อย่างยิ่ง
Callback กับ Atlas
ก่อนอื่นมาพูดถึง Atlas กันก่อน เพื่อนๆ หลายๆ คนอาจจะรู้สึกแปลกที่มี Callback อยู่แล้ว ทำไมเราต้องปล่อย Atlas อีกครั้งด้วย? เกี่ยวกับปัญหานี้ ฉันยังไม่ได้ตรวจสอบว่าผู้เขียน Atlas อธิบายอย่างไร แต่จากประสบการณ์ส่วนตัวของฉันในการใช้ callback และ atlas ฉันรู้สึกว่าการโทรกลับเป็นอินเทอร์เฟซนั้นคล้ายกับ postback มากและจะต้องอนุญาตให้ผู้ใช้ใช้งานได้เหมือนกับ postback อย่างไรก็ตาม กลไกที่คล้ายกับ postback ควรกล่าวว่าไม่สะดวกในการใช้งานเป็นพิเศษ และไม่ใช่เรื่องง่ายที่จะขยาย แน่นอนว่าเมื่อเปรียบเทียบกับการใช้งานกรอบงาน AJAX อื่นๆ ดังนั้น Microsoft จึงได้เรียนรู้จากการใช้งาน AJAX ที่มีอยู่มากมาย เช่น Prototype, Backbase และ AJAX.NET และรวมเข้ากับฟังก์ชันเฉพาะบางอย่างของ ASP.NET 2.0 เพื่อสร้างกรอบงาน AJAX ที่ดึงเอาจุดแข็งของผู้อื่น เป็นการยากที่จะวัดว่าการพัฒนาแอปพลิเคชัน AJAX ที่ใช้ Atlas นั้นดีเพียงใด แต่ก็ไม่ได้แย่ไปกว่ากรอบงาน AJAX อื่นๆ อย่างแน่นอน รวมถึงแบ็กเอนด์ของ Microsoft และแอปพลิเคชันของไซต์รุ่นหนาอย่าง live.com Promotion ผลกระทบของมันคุ้มค่าอย่างแน่นอน รอคอยที่จะ
อย่างไรก็ตาม นี่ไม่ได้หมายความว่าการนำ Callback ไปใช้นั้นไร้ประโยชน์ ในฐานะโปรแกรมเมอร์ เราจำเป็นต้องมีทัศนคติที่ถูกต้องและใช้เทคโนโลยีที่ถูกต้องที่สุดในกรณีการใช้งานที่ถูกต้อง ไม่มีเฟรมเวิร์กใดที่จะมีอำนาจทุกอย่างและเหมาะสมกับสภาพแวดล้อมการใช้งานใดๆ เช่นเดียวกับที่ทุกคนกำลังถกเถียงกันว่าวิธีการพัฒนาซอฟต์แวร์แบบใดดีที่สุด CMMi, RUP, XP, AGILE~~ จริงๆ แล้วไม่มีสิ่งที่ดีที่สุด เหมาะสมที่สุดก็เหมาะสมที่สุด สิ่งที่เราควรทำมากที่สุดคือการเข้าใจหลักการ ข้อดี และข้อเสียของวิธีแก้ปัญหาต่างๆ เพื่อที่เราจะใช้เครื่องมือที่เหมาะสมในการแก้ปัญหาเชิงปฏิบัติได้อย่างมีเหตุผล
เริ่มต้นจาก Client Script
เราทุกคนรู้ดีว่าที่ระดับล่างสุด AJAX ทั้งหมดมีกลไกการใช้งานไม่เกินสองกลไก: XMLHTTP และ IFRAME ก่อนที่คำว่า AJAX จะได้รับความสนใจอย่างกว้างขวาง อันที่จริง กรอบการทำงานที่อิงจากการใช้งานพื้นฐานทั้งสองนี้ หรือการใช้งานเอฟเฟกต์ที่ไม่รีเฟรชที่อิงจากเทคโนโลยีทั้งสองนี้ ได้ถูกนำไปใช้อย่างกว้างขวางแล้ว แน่นอนว่าด้วยการพัฒนาในปัจจุบัน ในแง่ของการใช้อินเทอร์เฟซ รายละเอียดของกลไกพื้นฐานเหล่านี้มักจะถูกซ่อนอยู่ในเฟรมเวิร์ก และการใช้อินเทอร์เฟซก็กลายเป็นเรื่องง่ายมากขึ้น ผู้ใช้เพียงแค่เรียกอินเทอร์เฟซแบบง่ายเหล่านี้ และไม่จำเป็นต้องรู้ ทำอย่างไรจึงจะบรรลุผลเฉพาะ
อย่างไรก็ตาม เนื่องจากเราอยู่ที่นี่เพื่อวิเคราะห์กลไกการใช้งานการเรียกกลับ ให้เราเริ่มต้นด้วยการเรียกสคริปต์ไคลเอนต์การโทรกลับเพื่อดูว่า Microsoft ใช้กลไกการเรียกกลับนี้อย่างไร
1. ClientScript.GetCallbackEventReference(...)
หากต้องการทริกเกอร์การโทรกลับ ก่อนอื่น การโทรจะต้องได้รับการออกในสคริปต์ไคลเอ็นต์ ไวยากรณ์การโทรโดยทั่วไปจะเป็นดังนี้:
<script language="javascript" type="text/javascript">
ฟังก์ชั่น any_script_function (หาเรื่อง, บริบท)
-
<%= ClientScript.GetCallbackEventReference(นี่, "arg", "ReceiveServerData", "บริบท")%>;
-
</script>
ClientScript.GetCallbackEventReference(...) จะส่งคืนสคริปต์การโทรกลับจริงตามพารามิเตอร์ที่ส่งผ่าน ฟังก์ชันนี้มีเวอร์ชันโอเวอร์โหลดหลายเวอร์ชัน ดังนั้นคุณจึงสามารถอ้างอิงถึง MSDN สำหรับความหมายของพารามิเตอร์เหล่านี้ได้ ใช้พารามิเตอร์เฉพาะในโค้ดตัวอย่างด้านบน:
- นี่หมายความว่าตัวควบคุมเซิร์ฟเวอร์ที่ดำเนินการโทรกลับคือเพจปัจจุบัน เพจปัจจุบันต้องใช้อินเทอร์เฟซ ICallbackEventHandler รวมถึงสตริง GetCallbackResult() และ void RaiseCallbackEvent(eventArgument) ฟังก์ชั่นอินเทอร์เฟซสองแบบ พารามิเตอร์นี้สามารถอ้างอิงถึงตัวควบคุมเว็บได้ แน่นอนว่าพื้นที่นี้ยังต้องใช้อินเทอร์เฟซ ICallbackEventHandler
- "arg" คือค่าของพารามิเตอร์ eventArgument ที่จะถูกส่งผ่านไปยัง RaiseCallbackEvent ซึ่งอนุญาตให้ผู้คน สตริงที่กำหนดรูปแบบ
- "ReceiveServerData" คือชื่อของฟังก์ชันสคริปต์ไคลเอ็นต์ที่ประมวลผลเนื้อหาที่ส่งคืนหลังจากการเรียกกลับสำเร็จ ฟังก์ชันนี้ต้องมีอยู่ในเพจที่ดำเนินการเรียกกลับ และฟังก์ชันนี้สามารถมีพารามิเตอร์ได้สองตัว ตัวอย่างเช่น:
<script type="text/javascript">
functionReceiveServerData (ผลลัพธ์ บริบท)
-
</script>
พารามิเตอร์ทั้งสองนี้เป็นผลลัพธ์ข้อมูลที่ส่งคืนของการเรียกกลับ และพารามิเตอร์บริบทที่ส่งคืนไม่เปลี่ยนแปลงเมื่อเราทริกเกอร์การเรียกกลับ แน่นอนว่าพารามิเตอร์ทั้งสองนี้เป็นประเภทสตริง
- ไม่จำเป็นต้องอธิบาย "บริบท" เพียงจำไว้ว่าพารามิเตอร์นี้จะถูกส่งผ่านไปยังฟังก์ชันการประมวลผลข้อมูลส่งคืนที่ระบุ เอกสารอย่างเป็นทางการของ MSDN บอกว่าโดยทั่วไปแล้วบริบทสามารถใช้เพื่อส่งโค้ดสคริปต์ที่ต้องถูกเรียกใช้ในฟังก์ชันการประมวลผลข้อมูลส่งคืนของไคลเอ็นต์ แต่ในความเป็นจริง คุณสามารถส่งผ่านอะไรก็ได้ ให้คิดว่ามันเป็นทริกเกอร์เรียกกลับจากไคลเอนต์ ไปยังช่องทางการถ่ายโอนพารามิเตอร์ระหว่างส่วนรับที่ประมวลผลข้อมูลที่ส่งคืน