ก่อนอื่นมาดูกระบวนการของการดำเนินการหน้า ASP
1. IIS ค้นหาไฟล์ ASP และส่งไปยังการประมวลผล ASP Engine (ปกติ ASP.DLL)
2. เอ็นจิ้นเปิดไฟล์ ASP นี้และค้นหาเนื้อหาระหว่าง <%และ%> เฉพาะเนื้อหาในบล็อกสคริปต์เท่านั้นที่ถูกวิเคราะห์โดยเครื่องยนต์และเนื้อหาอื่น ๆ จะถูกแทรกระหว่างบล็อกสคริปต์เป็นอักขระที่ไม่มีความหมาย มีความจำเป็นที่จะต้องอธิบายว่าในความเป็นจริงเนื้อหาของการวิเคราะห์เป็นมากกว่านั้น หากคุณอ่านโปรแกรมจำนวนมากคุณจะรู้ว่าแอตทริบิวต์ Runat บางตัวถูกทำเครื่องหมายว่าเป็นวัตถุ <Ojrop> ของเซิร์ฟเวอร์
3. สคริปต์ในบล็อกสคริปต์ของเอ็นจิ้น
-
หรอกฉัน
สำหรับ i = 1 ถึง 5
%> Hello World!
< % ถัดไป %>
เอ็นจิ้นไม่ได้วิเคราะห์บล็อกสคริปต์เหล่านี้แยกต่างหาก แต่ทำให้เกิดข้อผิดพลาดทางไวยากรณ์ในบล็อกสคริปต์ทั้งสอง ดังนั้นเราจึงได้ข้อสรุปต่อไปนี้: สคริปต์ที่ไม่ใช่เซิร์ฟเวอร์ทั้งหมดจะถูกส่งไปยังลูกค้า เซิร์ฟเวอร์ต้องไม่กังวลเกี่ยวกับการดำเนินการของสคริปต์ไคลเอนต์ แต่คุณสามารถส่งออกสคริปต์ไคลเอนต์ที่แตกต่างกันผ่านสคริปต์ของเซิร์ฟเวอร์
4. เอ็นจิ้นสุดท้ายสร้างการไหลของข้อความหรือผลการดำเนินการของสคริปต์ เบราว์เซอร์ไคลเอ็นต์จะปรากฏขึ้นในหน้า
< %… %> และ <script runat = เซิร์ฟเวอร์> ... </script>
พวกเขาเป็นสคริปต์ด้านข้างของเซิร์ฟเวอร์และดำเนินการและดำเนินการในเวลาเดียวกัน เมื่อพวกเขาดำเนินการพวกเขาก็รวมกัน
< %… %> และ <ภาษาสคริปต์ = ... > ... </script>
อดีตคือสคริปต์เซิร์ฟเวอร์หลังคือสคริปต์ไคลเอนต์ อดีตถูกดำเนินการก่อนและหลังถูกดำเนินการ
ในความเป็นจริงสคริปต์ของทั้งสองอาจถูกดำเนินการในเวลาเดียวกัน แต่พื้นที่แตกต่างกัน อดีตจะต้องดำเนินการอย่างมีเหตุผลล่วงหน้า ในขณะเดียวกันเราก็มีข้อสรุป: ในการดำเนินการของหน้าเดียวกันสคริปต์ไคลเอนต์ไม่สามารถป้อนกลับไปยังสคริปต์เซิร์ฟเวอร์ได้นั่นคือไคลเอ็นต์เรียกดูสมุดข้อความของคุณ ค่าการได้มาเป็นไปไม่ได้ที่จะประมวลผลในการตอบสนองเซิร์ฟเวอร์เดียวกัน
โทรหาส่วนประกอบ
โปรดทราบว่าสคริปต์เซิร์ฟเวอร์และสคริปต์ไคลเอ็นต์เป็นสคริปต์
หาก XMLHTTP ถูกใช้สำหรับหน้าเว็บของเซิร์ฟเวอร์ (เช่นการรวบรวม) มันจะถูกสร้างขึ้นในสคริปต์เซิร์ฟเวอร์ ไคลเอนต์ที่สร้างขึ้น
AdoDB.Connection Component ใช้เพื่อเข้าถึงฐานข้อมูล ไม่ต้องสงสัยเลยว่ามันอยู่ที่ลูกค้าเกี่ยวกับลูกค้าที่สร้างขึ้นในสคริปต์สุดท้าย
ในระยะสั้นสิ่งที่ขัดแย้งและแต่ละด้านมีลักษณะของตัวเอง สิ่งที่แตกต่างกันมีความขัดแย้งที่แตกต่างกัน เข้าใจอย่ามอง ... ). หลักการนี้กำหนดให้เราปฏิบัติตามหลักการวิเคราะห์เฉพาะของปัญหาเฉพาะ ฝ่ายค้านใช้วิธีเดียวเพื่อแก้ปัญหาความขัดแย้งของสิ่งต่าง ๆ กุญแจเปิดออกภูเขาแบบไหนและเพลงแบบไหนคือความจริง
ออบเจ็กต์การสร้างสคริปต์ VBScript ของเซิร์ฟเวอร์ใช้เมธอด Server.CreateObject (className)
ข้อผิดพลาดทั่วไป
-
ฟังก์ชั่น tsize (b)
'นี่คือฟังก์ชั่นที่กำหนดเองของฉัน
tsize = จีน
ฟังก์ชันสิ้นสุด
-
<a href = JavaScript: <%tsize ('ตัวแปร')%>> คลิกที่นี่เพื่อใช้ฟังก์ชั่นนิยามของฉัน </a>
การวิเคราะห์ข้อผิดพลาด:
มันสับสนความแตกต่างระหว่างสคริปต์เซิร์ฟเวอร์และสคริปต์ไคลเอนต์ ในระหว่างการดำเนินการจริงเราจะพบว่าไคลเอนต์ไม่ได้รับรหัสใด ๆ เช่น TSIZE เนื่องจาก TSIZE เป็นโปรแกรมบนเซิร์ฟเวอร์และหลังจากที่เอ็นจิ้นถูกประมวลผล (โปรดทราบว่าการประมวลผลของฟังก์ชั่นของเอ็นจิ้นนั้นเรียกว่าเซิร์ฟเวอร์ล้วนๆ สคริปต์มันจะไม่หายไปและมันเป็นไปไม่ได้ที่จะมีบทบาทกับลูกค้า กล่าวคือสคริปต์ไคลเอนต์ไม่สามารถเรียกใช้ฟังก์ชันสคริปต์ด้านข้างเซิร์ฟเวอร์ได้โดยตรง
ในความเป็นจริงโปรแกรมนี้ผิดกับไวยากรณ์ เปลี่ยนเป็น <%= tsize (ตัวแปร)%> ไม่มีข้อผิดพลาดทางไวยากรณ์ที่สคริปต์ของเซิร์ฟเวอร์ : JavaScript: จีน, จีนไม่สามารถดำเนินการได้
เอฟเฟกต์ของสคริปต์เซิร์ฟเวอร์บนสคริปต์ไคลเอนต์
ดังที่ได้กล่าวไว้ก่อนหน้านี้สคริปต์เซิร์ฟเวอร์จะดำเนินการอย่างมีเหตุผลในสคริปต์ไคลเอนต์ล่วงหน้าดังนั้นรหัสดังกล่าวจึงเป็นไปได้:
-
หรอกฉัน
สำหรับ i = 1 ถึง 5
response.write <script type = text/javascript> _
& Alert ('Hello World! & i &') </script>
ต่อไป
-
เกี่ยวกับการดำเนินการของการตอบสนอง REDIRECT และ JAVASCRIPT
โปรดทราบว่าการเขียนรหัสต่อไปนี้ผิด:
-
Response.redirect index.asp
response.write <script type = text/javascript> _
& แจ้งเตือน ('ข้อผิดพลาดรหัสผ่าน!') </script>
-
นี่เป็นข้อผิดพลาดทั่วไป
เหตุผลเกี่ยวข้องกับการจัดการรหัสสองบรรทัด รหัสสองบรรทัดไม่สามารถทำงานได้ในเวลาเดียวกัน
Response.write เป็นข้อความถึงลูกค้า
Response.redirect ส่งข้อมูลส่วนหัว HTTP ไปยังไคลเอนต์ (ข้อมูลส่วนหัว HTTP คืออะไรตัวอย่างเช่นการเขียนคุกกี้ไคลเอนต์คือข้อมูลส่วนหัว HTTP เบราว์เซอร์นี่คือเหตุผลที่บางครั้ง ปรับเปลี่ยนคุกกี้ที่ไม่ถูกต้องเนื่องจากตัวแบบเริ่มส่งและไม่ได้รับอนุญาตให้ส่งข้อมูลส่วนหัว HTTP ไม่ว่าจะมีการเขียนเนื้อหาจำนวนเท่าใดในบัฟเฟอร์เมื่อมีการเรียกว่าการตอบกลับจะถูกเรียกว่าจะถูกเรียกและจะถูกเรียก หากคุณติดตามการดำเนินการของโปรแกรมแบบไดนามิกเราจะพบว่าหลังจากการตอบกลับการตอบกลับโปรแกรมจะหยุดการดำเนินการดังนั้นให้ใส่ใจกับโปรแกรมเซิร์ฟเวอร์ -ริมฝีปากก่อนโทรตอบกลับ
ดังนั้นตัวอย่างข้างต้นควรแก้ไขอย่างไร? หากคุณไม่ต้องการแก้ไข index.asp เพื่อเพิ่มพรอมต์สคริปต์คุณสามารถใส่คำสั่งพวงมาลัยในสคริปต์ไคลเอนต์เพื่อดำเนินการเช่นนี้:
-
response.write <script type = text/javascript> _
& Alert ('!');
-