แนะนำ: ASP ควบคุม 6 รหัสคลาสสิกมากสำหรับฐานข้อมูล XML No.1-สร้างฐานข้อมูล XML data.xml <? xml version = 1.0?> <Records> <record> <name> Caca </name> <qq> 1
7.2.4 ข้อผิดพลาดสคริปต์ไคลเอนต์
จนถึงตอนนี้เราได้เรียนรู้เกี่ยวกับข้อผิดพลาดจาก ASP อย่างไรก็ตาม ASP มักจะใช้เพื่อสร้างหน้าเว็บที่มีสคริปต์ไคลเอนต์ หากองค์ประกอบ <script> ที่มีรหัสไคลเอนต์ไม่ได้ตั้งค่าเป็นแอตทริบิวต์ Runat = Server ASP จะไม่พิจารณาเซิร์ฟเวอร์และส่งข้อมูลหน้าเว็บไปยังไคลเอนต์โดยไม่ต้องเปลี่ยน
ดังนั้นหากเปิดเว็บเพจ ASP และกล่องโต้ตอบข้อผิดพลาดของเบราว์เซอร์จะปรากฏขึ้นคุณไม่ควรค้นหาข้อผิดพลาดในรหัสโปรแกรม ASP ทางฝั่งเซิร์ฟเวอร์ เบราว์เซอร์ไม่สามารถดูรหัสโปรแกรม ASP ได้ดังนั้นจึงไม่สามารถรับรู้ข้อผิดพลาดใด ๆ ได้ หากกล่องโต้ตอบปรากฏบนไคลเอนต์จะต้องมีข้อผิดพลาดในรหัสไคลเอนต์
1. ข้อผิดพลาดทางไวยากรณ์
หากมีข้อผิดพลาดทางไวยากรณ์ในรหัสโปรแกรมไคลเอนต์บนหน้าเว็บเบราว์เซอร์จะได้รับข้อผิดพลาดที่เกี่ยวข้องเมื่อดาวน์โหลดสคริปต์ไปยังไคลเอนต์ แม้ว่าเนื้อหาในหน้าเว็บยังคงสามารถโหลดได้ตามปกติ (เว้นแต่จะโหลดโดยรหัสสคริปต์ไคลเอนต์เหล่านี้แบบไดนามิก) เว็บเพจจะหยุดดำเนินการ ผู้ใช้จะเห็นกล่องโต้ตอบที่มีรายละเอียดข้อผิดพลาดหรือข้อความสถานะระบุว่าหน้าเว็บมีข้อผิดพลาด
เบราว์เซอร์ที่ทันสมัยมักจะซ่อนรายละเอียดของข้อผิดพลาดของสคริปต์เว็บและแสดงไอคอนข้อผิดพลาดเล็ก ๆ บนแถบสถานะเท่านั้น ใน IE 4.0 และ IE 5.0 กล่องโต้ตอบข้อผิดพลาดปกติสามารถเปิดใช้งานได้ผ่านหน้ากล่องโต้ตอบขั้นสูงของกล่องโต้ตอบตัวเลือกอินเทอร์เน็ตดังแสดงในรูปที่ 7-14:
รูปที่ 7-14 หน้าจอการตั้งค่าหน้าขั้นสูง
การจัดการข้อผิดพลาดของไคลเอนต์ในรหัสโปรแกรมสคริปต์คล้ายกับที่อยู่ในฝั่งเซิร์ฟเวอร์และมักจะง่ายกว่าเพราะหน้าเว็บสามารถดาวน์โหลดได้โดยตรงจากไดเรกทอรีเซิร์ฟเวอร์โดยการคลิกสองครั้ง โดยทั่วไปไม่จำเป็นต้องได้รับเว็บเพจผ่านเว็บเซิร์ฟเวอร์และ HTTP เพื่อสังเกตผลลัพธ์ในเบราว์เซอร์ ความแตกต่างเพียงอย่างเดียวคือการโต้ตอบของเซิร์ฟเวอร์บางอย่างทำโดยสคริปต์ไคลเอนต์เช่นการเชื่อมโยงข้อมูลหรือการโหลดแบบไดนามิกโดยใช้ RDS
2. ข้อผิดพลาดรันไทม์หรือความหมาย
ในสคริปต์ไคลเอ็นต์คุณมักจะพบข้อผิดพลาดทางไวยากรณ์และข้อผิดพลาดในเวลาทำงานหรือความหมาย ในความเป็นจริงปรากฏการณ์นี้เป็นเรื่องธรรมดามากทางด้านลูกค้า เนื่องจากไคลเอนต์ไม่สามารถควบคุมสภาพแวดล้อมสคริปต์เช่นฝั่งเซิร์ฟเวอร์จึงไม่แน่ใจว่าผู้ใช้กำลังทำงานบนเครื่องของพวกเขาอย่างไร ในความเป็นจริงเซิร์ฟเวอร์สามารถรับสถานการณ์ทั่วไปจากส่วนประกอบบางอย่างเช่นความสามารถของเบราว์เซอร์
ดังนั้นโปรแกรมการเขียนสคริปต์ที่ใช้วัตถุไคลเอนต์หรือภาษาสคริปต์รุ่นพิเศษและคุณสมบัติมีแนวโน้มที่จะทำงานไม่ถูกต้อง อย่างไรก็ตามการจัดการข้อผิดพลาดของไคลเอ็นต์นั้นคล้ายกับการจัดการข้อผิดพลาดของเซิร์ฟเวอร์
3. รหัสโปรแกรมไคลเอนต์ที่สร้างขึ้นบนเซิร์ฟเวอร์
เมื่อเกิดข้อผิดพลาดเป็นข้อยกเว้นพิเศษสำหรับกฎของหน้าข้อผิดพลาด ASP (เกี่ยวกับที่เกิดข้อผิดพลาด) ที่สอดคล้องกับกฎของหน้าข้อผิดพลาด ASP คือการใช้รหัสโปรแกรม ASP เพื่อสร้างรหัสโปรแกรมไคลเอ็นต์แบบไดนามิกบนเซิร์ฟเวอร์ ตัวอย่างเช่นคุณอาจต้องการดำเนินการประเมินผลใน ASP จากนั้นส่งผ่านข้อมูลไปยังรหัสสคริปต์ที่ทำงานบนไคลเอนต์ วิธีที่ง่ายที่สุดคือการแทรกข้อมูลลงในรหัสสคริปต์เป็นตัวแปร:
-
'รับชื่อเซิร์ฟเวอร์ของเราจากคอลเลกชัน ServerVariables
strServerNameInasp = request.serverVariables (server_name)
-
<ภาษาสคริปต์ = jscript runat = ไคลเอนต์>
<!- ซ่อนรหัสจากเบราว์เซอร์รุ่นเก่า
var strservername = < % = strservernameinasp %>;
-
การแจ้งเตือน ('ชื่อเซิร์ฟเวอร์คือ:' strservername);
-
// หยุดซ่อนรหัส
-
</script>
บนไคลเอนต์หลังจาก ASP ประมวลผลหน้านี้สิ่งที่คุณจะได้รับคือ:
<ภาษาสคริปต์ = jscript runat = ไคลเอนต์>
<!- ซ่อนรหัสจากเบราว์เซอร์รุ่นเก่า
var strservername = wroxbox;
-
การแจ้งเตือน ('ชื่อเซิร์ฟเวอร์คือ:' strservername);
-
// หยุดซ่อนรหัส
-
</script>
แอตทริบิวต์ runat = ไคลเอนต์สามารถละเว้นได้ แต่การเพิ่มรายการนี้สามารถทำให้ชัดเจนขึ้นเมื่อดูหน้าเว็บ ASP ที่รหัสกำลังทำงานอยู่
ด้วยวิธีนี้หากคุณต้องการเพิ่มข้อมูลจากฐานข้อมูลฝั่งเซิร์ฟเวอร์ไปยังอาร์เรย์ไคลเอนต์ในสถานที่ที่แน่นอนคุณสามารถใช้โปรแกรมต่อไปนี้เพื่อนำไปใช้งาน:
<ภาษาสคริปต์ = jscript runat = ไคลเอนต์>
<!- ซ่อนรหัสจากเบราว์เซอร์รุ่นเก่า
var arrebooks = อาร์เรย์ใหม่ (10) // ดัชนีสูงสุดที่มีอยู่จะเป็น
<% 'เริ่มต้นการประมวลผล ASP
intindex = 0
ทำในขณะที่ {ไม่ได้ในตอนท้ายของชุดระเบียน}
strTitle = {รับชื่อจากบันทึกฐานข้อมูล}
response.write arrebooks [& cint (intindex) &] = '_
& strtitle & '; & vbcrlf
Intindex = Intindex 1
{ย้ายไปยังระเบียนถัดไปในฐานข้อมูล}
วง
-
ทำอะไรบางอย่างที่นี่กับลูกค้าด้วยชื่อหนังสืออาร์เรย์
-
// หยุดซ่อนรหัส
-
</script>
รหัสไคลเอนต์นี้สร้างโดยรหัสโปรแกรม ASP ฝั่งเซิร์ฟเวอร์สร้างอาร์เรย์ของชื่อหนังสือเมื่อไคลเอนต์กำลังทำงานอยู่ ข้อผิดพลาดของสคริปต์ไคลเอนต์ที่สร้างขึ้นพร้อมกันจะปรากฏขึ้นในกล่องโต้ตอบข้อผิดพลาดของเบราว์เซอร์ เหตุผลสำหรับข้อผิดพลาดคืออาร์เรย์ที่ตั้งชื่อหลังจาก arrebooks ถูกสร้างขึ้นโดยรหัส JavaScript เมื่อทำงานบนไคลเอนต์และสามารถรับหนังสือ 9 เล่มเท่านั้น ในขณะที่รหัสฝั่งเซิร์ฟเวอร์สามารถสร้างชื่อหนังสือได้มากกว่า 9 เล่มซึ่งถูกกำหนดโดยจำนวนระเบียนในฐานข้อมูลต้นฉบับ สิ่งนี้เทียบเท่ากับรหัสลูกค้าต่อไปนี้:
<ภาษาสคริปต์ = jscript runat = ไคลเอนต์>
<!- ซ่อนรหัสจากเบราว์เซอร์รุ่นเก่า
var arrebooks = อาร์เรย์ใหม่ (10) // ดัชนีสูงสุดที่มีอยู่จะเป็น
arrebooks [0] = 'javascript ทันที';
arrebooks [1] = 'Professional ASP 3.0 การเขียนโปรแกรม';
arrebooks [2] = 'ADO 2.5 การอ้างอิงโปรแกรมเมอร์';
-
ฯลฯ
-
arrebooks [9] = 'เทคนิค ASP สำหรับเว็บมาสเตอร์';
arrebooks [10] = 'การอ้างอิงโปรแกรมเมอร์ ASP'; // <- ข้อผิดพลาดด้านไคลเอนต์เกิดขึ้นที่นี่
arrebooks [11] = 'การเขียนโปรแกรม ADSI CDO';
arrebooks [12] = 'การเขียนโปรแกรม MTS และ MSMQ มืออาชีพ';
-
ทำอะไรบางอย่างที่นี่กับลูกค้าด้วยชื่อหนังสืออาร์เรย์
-
// หยุดซ่อนรหัส
-
</script>
หน้านี้สามารถทำงานได้อย่างถูกต้องหลังจากการแก้ไข มันสามารถเพิ่มขึ้นได้โดยการเพิ่มขนาดอาร์เรย์หรือโดยการควบคุมจำนวนระเบียนจากฐานข้อมูล
7.3 ป้องกันข้อผิดพลาด
ฉันได้เห็นข้อผิดพลาดบางประเภทที่สามารถเกิดขึ้นได้ข้างต้นและฉันรู้สึกว่าฉันกำลังมองหาข้อผิดพลาด นี่คือข้อควรพิจารณาบางประการเกี่ยวกับวิธีหลีกเลี่ยงการแนะนำข้อผิดพลาดในโปรแกรม แม้ว่าจะไม่ได้รับประกันว่าโปรแกรมที่เขียนนั้นไม่มีข้อผิดพลาด แต่เทคนิคต่างๆที่สรุปไว้ที่นี่สรุปได้
แชร์: วิธีการแปลงเว็บเพจแบบไดนามิก ASP เป็นหน้า HTM แบบคงที่ เมื่อไม่นานมานี้หน้า ASP นั้นช้ามากที่จะดำเนินการกับผู้เข้าชมจำนวนมากและมันก็ไม่ได้รับการแก้ไขบ่อยครั้งดังนั้นมันจึงขี้เกียจเกินไปที่จะทำให้มันเป็นแบบคงที่โดยตรง ทุกครั้งที่ฉันต้องดาวน์โหลดจากเซิร์ฟเวอร์เพื่อแก้ไขฉันต้องหาวิธีในการแปลงหน้า ASP เป็นหน้า HTM แบบคงที่ ฉันเคยเห็นสิ่งนี้มาก่อน