แนะนำ: เข้าใจคุณสมบัติวิเศษของ FSO ใน ASP อย่างลึกซึ้ง ใน ASP, FSO หมายถึงวัตถุระบบไฟล์ซึ่งเป็นวัตถุระบบไฟล์ ระบบไฟล์คอมพิวเตอร์ที่เราจะจัดการหมายถึงการอยู่บนเว็บเซิร์ฟเวอร์ ดังนั้นตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์ที่เหมาะสมสำหรับสิ่งนี้ เป็นการดีที่คุณสามารถใช้เครื่องของคุณเอง
7.1.2 ข้อผิดพลาดความหมายหรือรันไทม์การค้นพบและการจัดการข้อผิดพลาดทางไวยากรณ์นั้นน่ารำคาญ แต่คุณจะพบข้อผิดพลาดประเภทอื่นที่น่าตื่นเต้นในการเขียนโปรแกรม - ข้อผิดพลาดทางความหมายหรือข้อผิดพลาดรันไทม์ ข้อผิดพลาดประเภทนี้จะถูกค้นพบเฉพาะเมื่อเรียกใช้รหัสสคริปต์หรือโปรแกรมอื่น ๆ กล่าวอีกนัยหนึ่งรหัสที่สมบูรณ์และถูกต้องได้รับการตีความหรือรวบรวมโดยล่ามหรือคอมไพเลอร์และเกิดข้อผิดพลาดในระหว่างการดำเนินการ ข้อผิดพลาดรันไทม์คำว่าคำหมายถึงผลลัพธ์ของข้อผิดพลาดทางความหมายนั่นคือข้อผิดพลาดดังกล่าวมีอยู่ในความหมายของรหัสและมองเห็นได้เมื่อรหัสถูกเรียกใช้
ความแตกต่างนี้มาจากความจริงที่ว่าโปรแกรมคอมไพเลอร์หรือล่ามจะต้องสร้างคำอธิบายของรหัสภายในก่อนที่จะจัดการรหัสโปรแกรมที่เกี่ยวข้องกับการจับคู่ของการเริ่มต้นและจุดสิ้นสุดของโครงสร้างหลายโครงสร้างเพื่อระบุสิ่งที่แต่ละโครงสร้างมีอยู่แล้ววิเคราะห์แต่ละประโยคเพื่อทราบวิธีดำเนินการประโยค ตัวอย่างเช่นหากมีถ้ามี…อื่น…สิ้นสุดถ้าโครงสร้างขั้นตอนแรกของล่ามหรือคอมไพเลอร์คือการวิเคราะห์คำสั่งใดในส่วนนั้นและที่อยู่ในส่วนอื่น วัตถุประสงค์ของขั้นตอนนี้คือการกำหนดสาขาที่จะดำเนินการหลังจากทดสอบเงื่อนไข IF ในโครงสร้าง
ความแตกต่างที่แท้จริงระหว่างคอมไพเลอร์ (เช่นที่เห็นในภาษาการเขียนโปรแกรมเช่น Visual Basic และ C) และล่าม (เช่นล่ามสำหรับภาษาสคริปต์เช่น VBScript และ JScript) คือคอมไพเลอร์ไม่ได้พยายามเรียกใช้รหัสโปรแกรม ล่ามไม่มีไฟล์ของรหัส แต่ดำเนินการทีละขั้นตอนที่รันไทม์
1. ข้อผิดพลาดทำให้การวิ่งหยุด
หากโปรแกรมมีข้อผิดพลาดทางความหมายคุณสามารถรับพรอมต์ได้ที่รันไทม์ หากคุณโชคดีโปรแกรมจะหยุดเมื่อเกิดข้อผิดพลาดเพื่อให้ง่ายต่อการค้นหาว่าข้อผิดพลาดอยู่ที่ไหน ตัวอย่างเช่นโปรแกรมต่อไปนี้กำหนดอาร์เรย์ที่มีหกองค์ประกอบ
-
Dim Arrvalues (5) 'เพื่อเก็บองค์ประกอบหกรายการจัดทำดัชนีตั้งแต่ 0 ถึง 5
arrvalues (6) = อ๊ะมีข้อผิดพลาด
-
หากคุณพยายามอ่านหรือตั้งค่าองค์ประกอบด้วยตัวห้อยเป็น 6 คุณสามารถรับข้อผิดพลาดรันไทม์ได้ดังแสดงในรูปที่ 7-7:
รูปที่ 7-7 ผลการดำเนินการโปรแกรม 6
โปรดทราบว่าประเภทข้อผิดพลาดที่นี่คือข้อผิดพลาดรันไทม์ (เทียบเท่ากับความหมาย) ไม่ใช่ข้อผิดพลาดทางไวยากรณ์ ข้อความแสดงข้อผิดพลาดแสดงจำนวนแถวที่เกิดข้อผิดพลาดและคำอธิบายของข้อผิดพลาดซึ่งช่วยให้เราค้นหาข้อผิดพลาดที่เกี่ยวข้องได้ง่ายขึ้น แต่นี่เป็นตัวอย่างง่ายๆในรหัสโปรแกรมที่ซับซ้อนมากขึ้นข้อผิดพลาดนี้อาจเกิดขึ้นในบางโปรแกรมที่ผ่านค่าบางส่วนและเพิ่มลงในอาร์เรย์ ดังที่แสดงด้านล่าง:
-
dim arrvalues (5) 'เพื่อเก็บองค์ประกอบหกองค์ประกอบ
สำหรับ intloop = 0 ถึง intlistCount 'จำนวนรายการในบางรายการ
arrvalues (intloop) = request.form (selectedItems) (intlistcount)
ต่อไป
-
ในกรณีนี้มีแนวโน้มว่าคุณจะได้รับรายการมากเกินไปหรือดัชนีของอาร์เรย์ไม่เพียงพอ ตามข้อกำหนดของรหัสคุณสามารถกำหนดข้อผิดพลาดได้และคุณสามารถแก้ไขข้อผิดพลาดนี้ได้โดยการเพิ่มขนาดอาร์เรย์
-
dim arrvalues (10) 'เพื่อเก็บองค์ประกอบสิบเอ็ด
สำหรับ intloop = 0 ถึง intlistcount 'จำนวนรายการ int รายการบางรายการ
arrvalues (intloop) = request.form (selectedItems) (intlistcount)
ต่อไป
-
หรือตั้งค่าพารามิเตอร์ลูปตามลำดับเพื่อแก้ไขการจัดการข้อผิดพลาด
-
dim arrvalues (5) 'เพื่อเก็บองค์ประกอบหกองค์ประกอบ
intarraymax = intlistcount
ถ้า intarraymax> 5 แล้ว intarraymax = 5
สำหรับ intloop = 0 ถึง intarraymax 'เพิ่มรายการหกรายการแรกเท่านั้น
arrvalues (intloop) = request.form (selectedItems) (intlistcount)
ต่อไป
-
ข้อผิดพลาดรันไทม์อื่น ๆ อีกมากมายสามารถหยุดหน้าเว็บไม่ให้ทำงานเช่นการสร้างอินสแตนซ์ของส่วนประกอบหรือวัตถุบางอย่างเนื่องจากมีข้อผิดพลาด progid หรือเนื่องจากส่วนประกอบไม่ได้ติดตั้งอย่างถูกต้อง ในกรณีเหล่านี้ผลลัพธ์จะให้ ActiveX ไม่สามารถสร้างข้อความแสดงข้อผิดพลาดของวัตถุได้ตามด้วยหมายเลขบรรทัดของการโทรไปยังเมธอดเซิร์ฟเวอร์ CREATEOBJECT
2. ข้อผิดพลาดในการสร้างผลข้อผิดพลาด
ดังที่ได้กล่าวไว้ข้างต้นเราอาจโชคดีถ้าเราพบข้อผิดพลาดรันไทม์ที่ทำให้รหัสโปรแกรมหยุด แต่สถานการณ์อื่นคือโปรแกรมสามารถดำเนินการได้ดีราวกับว่าไม่มีอะไรเกิดขึ้นและในที่สุดก็ให้ผลลัพธ์ที่ไม่ถูกต้อง นี่เป็นความผิดพลาดที่ยากที่สุดในการค้นพบและแก้ปัญหาเพราะคุณไม่ทราบว่ามีอะไรผิดปกติ ตัวอย่างเช่นสมมติว่ามีหน้าเว็บที่ใช้วันเกิดของผู้ใช้เป็นค่าวันที่และแสดงองค์ประกอบวันที่แยกกัน (คุณสามารถเพิ่มเป็นสามรายการลงในฐานข้อมูล)
-
'รับค่าจากคำขอและแสดง
datbirthdate = request.form (วันเกิด)
Response.write ค่าที่คุณป้อนคือ: & datbirthdate & <p>
'รับองค์ประกอบวันที่แต่ละรายการ
intday = day (datbirthdate)
intmonth = เดือน (datbirthdate)
Intyear = ปี (datbirthdate)
'และแสดงพวกเขา
Response.write Day: & CSTR (intday) & <br>
Response.write เดือน: & cstr (intmonth) & <br>
Response.write ปี: & CSTR (Intyear) & <br>
-
รูปที่ 7-8 เป็นผลลัพธ์ที่แสดงในเดือนสไตล์อเมริกันเดือน/วัน/ปีราวกับว่าทุกอย่างเรียบร้อยดี
รูปที่ 7-8 หน้าจอแสดงวันเกิด
อย่างไรก็ตามหากคุณป้อนวันที่ผิดกฎหมายหรือปล่อยให้กล่องข้อความอินพุตว่างเปล่าคุณจะได้รับข้อผิดพลาดในเวลาทำงานดังแสดงในรูปที่ 7-9:
รูปที่ 7-9 หน้าจอพรอมผิดพลาดข้อผิดพลาด
(1) ถ้าไม่ใช่ผู้เชี่ยวชาญ JScript
นี่ไม่ใช่ปัญหาใหญ่เมื่อค้นหาข้อผิดพลาดเพราะเราสามารถค้นพบได้อย่างรวดเร็วว่าทำไมข้อผิดพลาดเกิดขึ้น ความจริงที่ว่าหน้าเว็บหยุดทำงานช่วยให้เราติดตามข้อผิดพลาด อย่างไรก็ตามข้อผิดพลาดที่ไม่คาดคิดอาจเกิดขึ้นได้ ตัวอย่างเช่นรหัสโปรแกรมใหม่ใน JScript เนื่องจากฉันไม่ใช่ผู้เชี่ยวชาญ JScript ข้อผิดพลาดเล็กน้อยบางอย่างปรากฏขึ้น
-
// รับค่าจากคำขอและแสดง
var datbirthdate = วันที่ใหม่ (request.form (วันเกิด));
Response.write (ค่าที่คุณป้อนคือ: datbirthdate <p>);
// รับองค์ประกอบวันที่แต่ละรายการ
intday = datbirthdate.getday ();
intmonth = datbirthdate.getMonth ();
intyear = datbirthdate.getYear ();
// และแสดงพวกเขา
Response.write (วัน: intday.toString () <br>);
Response.write (เดือน: intmonth.toString () &
แบ่งปัน: ใช้ ASP เพื่อใช้กลยุทธ์การทำงานเต็มรูปแบบสำหรับข้อมูลติดตาม MP3 มาพูดคุยสั้น ๆ เกี่ยวกับแท็ก ID3 ของ MP3 เพราะส่วนใหญ่ใช้ในการใช้งานสิ่งนี้ mp3 ไม่ใช่สิ่งที่เราเห็นในวันนี้ในตอนแรก มีนักร้องยุคคอลเลกชัน ฯลฯ ข้อมูลและมีเพียงพารามิเตอร์ง่ายๆบางอย่างเช่นใช่/ไม่ใช่เพื่อระบุว่าเป็นส่วนตัวหรือลิขสิทธิ์