[หมายเหตุ: ย่อหน้านี้ไม่เกี่ยวอะไรกับชื่อเรื่องและสามารถข้ามได้] หลังจากดู Stargate สองตอนและอาบน้ำเสร็จ ในที่สุดฉันก็ตัดสินใจเริ่มเขียนบทความนี้ นี่เป็นบทความทางเทคนิคต้นฉบับอย่างแท้จริงเรื่องแรกของฉัน ในที่สุดฉันก็ได้ดำเนินการตามขั้นตอนนี้แล้ว จริงๆ แล้ว ฉันได้เปิดบล็อกต่างๆ มากมาย ตั้งแต่บล็อกแรกๆ ไปจนถึง Blog Park และบล็อก Sina ของฉันเพื่อบ่น จริงๆ แล้ว จุดประสงค์เดิมของการเริ่มต้นบล็อกคือเพื่อบันทึกกระบวนการเรียนรู้ของฉันขณะเขียนโปรแกรม แต่ต่อมาก็กลายเป็นเรื่องที่เคยบ่นไป ถือได้ว่าเป็นผลจากการที่ฉันไม่สามารถมีสมาธิกับการเรียนได้ อย่างไรก็ตาม อย่างที่บอกไปว่ายังไม่สายเกินไปที่จะแก้ไขปัญหา เริ่มตั้งแต่บทความนี้ มีสมาธิมากขึ้นและมีสมาธิมากขึ้น ด้วยความคิดที่มุ่งเน้นนี้ ในที่สุดฉันก็เริ่มเขียนโปรแกรมได้อย่างเหมาะสมอีกครั้งเมื่อเร็ว ๆ นี้ คราวนี้ฉันวางสิ่งที่ฉันไม่ต้องการทำลงไปจริงๆ และมุ่งเน้นไปที่การเขียนโค้ด C# ที่ฉันชอบ ในภาษาการเขียนโปรแกรมที่ฉันรู้จัก รายการโปรดคือ C# และ Javascript อย่างหลังเป็นภาษาสคริปต์ ฉันเพิ่งตกหลุมรักมันเมื่อเร็ว ๆ นี้ ตอนแรกฉันคิดว่ามันเหมือนกับภาษาพื้นฐานที่ฉันเล่นเมื่อตอนที่ฉันยังเป็นเด็ก ออกมาว่ามันไม่ใช่แบบนี้ แม้จะเป็นภาษาสคริปต์เหมือนกับ VBS แต่จริงๆ แล้วยังมีเนื้อหาที่ซ่อนอยู่ภายใต้รูปลักษณ์ของภาษา C อีกมาก . ฉันชอบมัน. แพลตฟอร์ม .NET ฉันไม่รู้ว่าทำไมเมื่อฉันใช้ภาษา C# ในการเขียนโค้ดครั้งแรกในปี 2544 ฉันคิดว่ามันสวยงามมากแล้วฉันก็ตกหลุมรักมัน อย่างไรก็ตาม เนื่องจากปัญหาสิ่งแวดล้อมที่ ครั้งนั้นมันถูกขัดจังหวะไประยะหนึ่งจนถึงปี 2004 ฉันหยิบมันขึ้นมาอีกครั้ง แต่เป็นเวลากว่าหนึ่งปีที่ฉันแค่ดึงตัวควบคุมจำนวนมากแล้วปรับมันในแผงคุณสมบัติดูเหมือนว่าฉันลืมไปแล้วว่าอะไร เดิมทีเว็บดูเหมือน แต่สุดท้ายก็มีบางอย่างที่เปลี่ยนความทรงจำของฉัน ---- อาแจ็กซ์
กรอบการพัฒนา Ajax มีอยู่ทุกหนทุกแห่ง อันที่จริง เมื่อ ASP.NET 2.0 เปิดตัว เนื้อหาที่คล้ายกันบางส่วนก็ถูกรวมเข้ากับการควบคุมข้อมูลบางอย่าง เช่น GridView ในบทความในนิตยสาร MSDN ในเดือนมกราคม 2548 ASP.NET" (เวอร์ชันภาษาจีน | ภาษาอังกฤษ) ทำให้ฉันตระหนักถึงเสน่ห์ของการโทรแบบอะซิงโครนัสใน asp.net (วิธีการนำไปใช้งานจำกัดอยู่ที่เวอร์ชัน beta1 เกี่ยวกับสคริปต์เรียกกลับส่วนที่ beta1, beta2 และเวอร์ชันอย่างเป็นทางการ ซึ่งแตกต่างไปตามกาลเวลา ผู้ที่สนใจสามารถอ้างถึงเนื้อหา MSDN ที่เพิ่งเปิดตัวได้ด้วยตนเอง) แต่ตอนนั้นฉันเพิ่งเล่นกับมัน ต่อมาฉันใช้ Atlas ดังนั้นฉันจึงไม่ได้สนใจมันมากนัก ฉันได้พูดคุยกับ ASP เมื่อไม่นานมานี้ เมื่อนำ ajax ไปใช้งานใน .net ฉันบอกว่าการนำ Atlas ไปใช้นั้นยุ่งยากเกินไป และสิ่งที่เขาต้องการจะนำไปใช้ก็เป็นเพียงเนื้อหาเล็กๆ น้อยๆ เท่านั้นที่ไม่จำเป็นต้องยุ่งยากขนาดนั้น ฉันไม่คุ้นเคยกับเฟรมเวิร์ก ajax ของ .NET นอกเหนือจากนี้ ฉันจำกลไกการเรียกกลับสคริปต์ในตัวได้ เมื่อใช้โปรเจ็กต์ของเพื่อน (ด้วยความยินยอมของเขาเอง) เราจึงเขียนโค้ดมากมายเกี่ยวกับเรื่องนี้หลังจากเขียนมัน จู่ๆฉันก็พบปัญหานั่นคือโค้ดยุ่งเกินไป แต่ละหน้าจะคล้ายกัน และสามารถส่งผ่านพารามิเตอร์สตริงได้เพียงตัวเดียวเท่านั้น นอกจากการโต้ตอบแล้ว เรายังต้องใช้เฟรมอินไลน์เพื่อแสดงข้อมูลที่มีราคาแพงอีกด้วย เมื่อสองวันก่อน ฉันไป Haitu และซื้อหนังสือ "Ajax Advanced Language Programming" หลังจากอ่านบางส่วนแล้ว จู่ๆ ฉันก็อยากจะเข้าใจวิธีการใช้ script callback ใน asp.net 2.0? เมื่อมองย้อนกลับไปในตอนนี้ มีการอธิบายหลายจุดในบทความ "Custom Script Callback ใน ASP.NET" ไว้อย่างชัดเจน อาจกล่าวได้ว่าในขณะนั้น มีหลายสิ่งหลายอย่างอยู่ในระบบคลาวด์ และผู้อุปถัมภ์สามารถเห็นได้เฉพาะผลกระทบเท่านั้น ฉันจะโพสต์สิ่งที่ฉันคิดว่าเป็นการนำไปใช้ที่ง่ายที่สุดก่อนแล้วค่อยวิเคราะห์
สร้างเพจ Default.aspx ใหม่ เพิ่มตัวควบคุมกล่องกาเครื่องหมายบนเพจ แล้วเปิดไฟล์ Default.aspx.cs คลาส _Default เพิ่มอินเทอร์เฟซที่สืบทอดมาสามรายการ ได้แก่ ICallbackContainer, IcallbackEventHandler และ InamingContainer:
[รหัส 1]
#region สมาชิก ICallbackContainer
สตริงสาธารณะ GetCallbackScript (ปุ่มควบคุม IButtonControl, อาร์กิวเมนต์สตริง)
-
Throw new Exception("วิธีการหรือการดำเนินการไม่ได้ถูกนำมาใช้");
-
#endregion
#ภูมิภาค สมาชิก ICallbackEventHandler
สตริงชั่วคราว;
สตริงสาธารณะ GetCallbackResult()
-
//โยนข้อยกเว้นใหม่("ข้อผิดพลาดตัวอย่าง");
อุณหภูมิกลับ;
}
โมฆะสาธารณะ RaiseCallbackEvent (สตริง eventArgument)
-
temp = "_____" + eventArgument + "สำเร็จ._____";
-
#ภูมิภาคสุดท้าย
ไปที่วิธี Page_Load ของเพจ Default.aspx.cs และเพิ่มรหัสต่อไปนี้:
[รหัส 2]
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
string temp = Page.ClientScript.GetCallbackEventReference (นี่, "arg", "Callback", "บริบท", "OnError", จริง);
string script = "function CallServer (arg, บริบท) {" + temp + "}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "abc", สคริปต์, จริง);
CheckBox1.Attributes.Add("onclick", "CallServer('ฉันเรียกเซิร์ฟเวอร์ ','context');");
}
หลังจากแก้ไขโค้ด CS แล้ว ให้เปิดไฟล์ Default.aspx และเพิ่มโค้ดต่อไปนี้ระหว่าง <head>...</head>:
[รหัส 3]
<script type="text/javascript">
ฟังก์ชั่น OnError (ข้อผิดพลาดบริบท)
-
แจ้งเตือน(ผิดพลาด);
}
ฟังก์ชันโทรกลับ (หาเรื่อง, บริบท)
-
การแจ้งเตือน (หาเรื่อง);
-
</สคริปต์>
ตัวควบคุมกล่องกาเครื่องหมายที่นี่สามารถดึงขึ้นมาแบบสบายๆ และสามารถเปลี่ยนแปลงได้หากจำเป็น อย่างไรก็ตาม คุณอาจต้องการให้ความสนใจเมื่อใช้ตัวควบคุมปุ่ม ซึ่งจะเปิดใช้งานเหตุการณ์ OnSubmit ตามค่าเริ่มต้น ดังนั้นคุณอาจต้องตั้งค่าหรือใช้ ควบคุม HTML โดยตรง โค้ดด้านบนถือได้ว่าเป็นการใช้งานสคริปต์เรียกกลับขั้นต่ำ และทั้งหมดนี้ล้วนจำเป็น
การควบคุมที่ใช้การเรียกกลับพื้นฐานต้องใช้อินเทอร์เฟซสามแบบ: ICallbackContainer, INamingContainer และ ICallbackEventHandler ในความเป็นจริง INamingContainer ไม่มีเนื้อหาอินเทอร์เฟซที่จำเป็นต้องนำไปใช้ เพียง "ระบุการควบคุมคอนเทนเนอร์ที่สร้างเนมสเปซ ID ใหม่ภายในลำดับชั้นการควบคุมของออบเจ็กต์เพจ" (อ้างอิงจาก MSDN) สำหรับอินเทอร์เฟซ ICallbackContainer คำอธิบายที่ให้ไว้ใน MSDN (เวอร์ชันภาษาจีน) ค่อนข้างคลุมเครือ บทความที่เกี่ยวข้องบางบทความยังแนะนำการเรียกกลับของสคริปต์และอินเทอร์เฟซ IcallbackEventHandler เนื่องจากเราใช้เพจเป็นพื้นฐานสำหรับการเรียกกลับที่นี่ เราจึงไม่ใช้วิธีนี้ จะถูกนำไปใช้โดยอินเทอร์เฟซคือ GetCallbackScript แต่ถ้าคุณห่อหุ้มการควบคุม Ajax ของคุณเอง วิธีการนี้มีประโยชน์มาก ที่นี่เราแค่ใช้วิธีการที่ ICallbackEventHandler นำมาใช้ในการประมวลผลข้อมูล เพราะในวิธี Page_Load ฉันลงทะเบียนวิธีการ CallServer แล้ว ทริกเกอร์ในเหตุการณ์ OnClick ที่แนบมากับ CheckBox เพื่อให้เราเข้าใจกระบวนการโทรที่ชัดเจนยิ่งขึ้น
ต่อมา [รหัส 3] ฉันใช้วิธี Javascript สองวิธี วิธีหนึ่งใช้เพื่อจัดการกับข้อผิดพลาดในการโทร และอีกวิธีหนึ่งใช้เพื่อจัดการข้อมูลที่ส่งคืนหลังจากการโทรสำเร็จ ใน [รหัส 1] มีโค้ดชิ้นหนึ่งที่แสดงข้อยกเว้นที่ฉันใส่ความคิดเห็นไว้ ด้วยโค้ดนี้ ฉันสามารถจำลองการเรียกเมธอด OnError ได้
จนถึงตอนนี้เราได้เห็นวิธีการใช้การเรียกนี้แล้ว พูดตรงๆ เลยว่านี่เป็นวิธีการขั้นสูงในการลากตัวควบคุม แต่จะนำไปใช้อย่างไร เหตุใดฉันจึงไม่เห็นสิ่งใดเกี่ยวกับ XmlHttpRequest (ฉันเชื่อมั่นว่านี่เป็นวิธีที่ดีที่สุดในการใช้ Ajax เพราะโค้ดนี้สามารถใช้กับเบราว์เซอร์ใดก็ได้ที่รองรับ Javascript ฉันคิดว่ามันไม่เกี่ยวอะไรกับประตูลับ)
คอมไพล์รัน......
การคลิกช่องทำเครื่องหมายบนหน้าที่รันอยู่จะแสดง "___ฉันเรียกเซิร์ฟเวอร์สำเร็จ___" สิ่งนี้ดำเนินการอย่างไร? อันที่จริง เพียงคลิก "ดูซอร์สโค้ด" ในหน้านี้ มีความลับเล็กๆ น้อยๆ ซ่อนอยู่ที่นี่ สคริปต์หนึ่งบล็อกจะถูกสร้างขึ้นโดยอัตโนมัติ เป็นวิธี CallSerer ที่เราเพิ่งลงทะเบียนโดยใช้ ClientScript และยังมีแท็กลิงก์สำหรับสคริปต์ภายนอก นี่คือกุญแจสำคัญที่เชื่อมต่ออยู่:
<script src="/TechTest/WebResource.axd?d=DE9YrizlDDq8OUlo_3rQgA2&t=632919546726295408" type="text/javascript"></script>
เปิดที่อยู่ตามที่อยู่ที่ระบุโดย SRC ด้านบน และคุณจะได้รับ ไฟล์ WebResource.axd (กรอกที่อยู่การเชื่อมต่อลงในเครื่องมือดาวน์โหลด เช่น Thunder และคุณสามารถดาวน์โหลดได้) เมื่อคุณเปิดขึ้นมา คุณจะเห็นว่าไฟล์นี้มีโค้ด Javascript อยู่จริง:
ลอง
-
xmlRequest = XMLHttpRequest ใหม่();
-
จับ(จ)
-
พยายาม
-
xmlRequest = ใหม่ ActiveXObject("Microsoft.XMLHTTP");
-
จับ(จ)
-
-
-
รหัสดูคุ้นเคยมาก!
ถ้า (!useAsync)
-
ถ้า (__synchronousCallBackIndex != -1)
-
__pendingCallbacks[__synchronousCallBackIndex] = null;
-
__synchronousCallBackIndex = callbackIndex;
}
ข้างในนี้เหรอ? นี่ไม่ใช่สิ่งที่จัดการตัวเลือกการโทรแบบอะซิงโครนัสในวิธี Page.ClientScript.GetCallbackEventReference ไม่ใช่หรือ
มีโค้ดที่มีประโยชน์มากมายอยู่ในนั้น ฉันกำลังค้นคว้า .........................
มีหลายวิธีนอกเหนือจากนี้ พูดตรงไปตรงมา มันเป็น Ajax ที่ง่ายมาก การห่อหุ้มเฟรมเวิร์กนั้นรวมถึงการประมวลผลเหตุการณ์การควบคุมและการประมวลผลคำขอ postback เราสามารถสร้างการห่อหุ้มอื่น ๆ บนพื้นฐานนี้ เพื่อที่จะสามารถห่อหุ้มโดยตรงเป็นการควบคุม .NET Ajax แบบง่าย ๆ เป็นส่วนประกอบของ . NET ในระหว่างการพัฒนา โซลูชันน้ำหนักเบา
จริงๆ แล้วเทคโนโลยี Java, .NET หรือ PHP ต่างก็เป็นการห่อหุ้ม HTTP ขั้นสูงบนฝั่งเซิร์ฟเวอร์ เช่นเดียวกับเทคโนโลยี CGI ที่เราใช้เมื่อนานมาแล้ว และตอนนี้ เทคโนโลยีของเว็บก็ก้าวหน้ามากขึ้น และเข้าใจมากขึ้น เมื่อมาถึง กลไกการทำงานภายในของ .NET ทำให้เราสามารถหลุดพ้นจากข้อจำกัดบางประการและเขียนเพจบางหน้าใหม่หรือควบคุมตัวเราเองเพื่อสร้างสภาพแวดล้อมการพัฒนา Ajax ของเราเอง
ฉันเคยเป็นวิศวกรควบคุม ฉันคิดว่า encapsulation เป็นเทคโนโลยีที่จำเป็นในยุคของโรงงานขนาดใหญ่ อย่างไรก็ตาม โปรแกรมเมอร์ยังคงต้องเจาะลึกและเข้าใจเนื้อหาเบื้องหลังการทำงานของโปรแกรมอย่างแท้จริงเพื่อให้สามารถพัฒนาคุณภาพสูงได้ดีขึ้น โปรแกรมผลิตภัณฑ์