griefforyou [ต้นฉบับ]
เรียนดร. GUI:
ฉันมีคำถามเกี่ยวกับ XML ฉันเผยแพร่หน้า ASP ผ่าน XMLHTTP ส่งข้อมูลกลับเป็น HTML และทำ object.innerHTML บน div เซลล์ตาราง หรือองค์ประกอบใดๆ
ปัญหาที่ฉันมีคือเมื่อฉันสร้างแบบฟอร์มบนเพจเซิร์ฟเวอร์ ASP และส่งแบบฟอร์มกลับมาเป็น HTML ทุกอย่างก็ใช้ได้ดี แต่ฉันต้องการการตรวจสอบความถูกต้องฝั่งไคลเอ็นต์ด้วย ดังนั้นฉันจึงใส่ลิงก์หน้า JScript ลงในเนื้อหาของ HTML ตอบกลับที่ฉันวางแผนจะส่งกลับ หลังจากทำเช่นนี้ สคริปต์จะไม่ทำงาน
เมื่อฉันรวมการอ้างอิง JScript src จริงในหน้าหลัก มันก็ใช้ได้ดี นี่เป็นเพราะว่าโค้ด JScript ไม่ได้โหลดลงในรันไทม์ใช่ไหม เป็นไปได้ไหมที่จะตอบกลับโพสต์ XMLHTTP โดยไม่ต้องส่งคืนโค้ด JScript และใช้งานได้ สามารถสร้างฟังก์ชัน JScript ได้ทันทีสำหรับเพจที่ฉันสร้างได้หรือไม่
อีกวิธีหนึ่งที่ฉันไม่ได้ลองทำคือการโพสต์ข้อมูล XML ผ่าน XMLHTTP จากนั้นส่งกลับเป็นข้อมูล XML จากนั้นใช้สไตล์ชีต XSL เพื่อแปลงข้อมูล ฉันเดาว่ามันเป็นไปได้ที่จะกำหนดฟังก์ชัน JScript ในลักษณะนั้น แต่แนวทางนี้ดูซับซ้อนเกินไป คุณมีข้อเสนอแนะหรือคำตอบหรือไม่?
ขอบคุณสำหรับ
คำตอบจาก Dr.
Peter Sung
GUI:ใช่แล้ว Peter คุณสามารถส่งคืนโค้ด Microsoft JScript เพื่อตอบสนองต่อโพสต์/รับ XMLHTTP และให้เรียกใช้โค้ดนั้นได้ การทำเช่นนี้ก็เหมือนกับการกินเค้กสักชิ้นแล้วกินทีหลัง ดังที่คุณอาจเดาได้ วิธีที่ดีที่สุดในการทำเช่นนี้คือการใช้ประโยชน์จากสไตล์ชีต XSL ซึ่งเป็นเรื่องง่ายเมื่อคุณทำให้ทุกประเภทกลับมาเป็นปกติแล้ว Dr. GUI ยังสามารถเป็นตัวอย่างสั้นๆ ได้อีกด้วย (แน่นอนว่า ยังมีวิธีแก้ไขปัญหาอื่นๆ อยู่ ตราบใดที่การตอบกลับมีส่วนหัวและอักขระที่ถูกต้องในลำดับที่ถูกต้อง เบราว์เซอร์จะตีความการตอบสนองเพื่อให้การตอบสนองทำงานได้อย่างถูกต้อง คุณสามารถใช้การต่อสตริงเพื่อสร้างการตอบสนองได้ หากจำเป็น )
ด้านล่าง ในตัวอย่างของเขา Dr. GUI ใช้ JScript สำหรับโค้ดฝั่งไคลเอ็นต์และ VBScript (Microsoft Visual Basic Scripting Edition) ในหน้า ASP กลยุทธ์ที่นำมาใช้คือ: ไฟล์ XML มีเฉพาะข้อมูล (และการอ้างอิงถึงสไตล์ชีต) ไฟล์ XSL มีการจัดรูปแบบ HTML ทั้งหมดที่จำเป็นในการสร้างหน้าที่สมบูรณ์ (รวมถึงสคริปต์ด้วย) หน้า ASP ประกอบด้วยการเรียกไม่กี่ครั้งเพื่อสร้างวัตถุ XMLHTTP โหลดไฟล์ XML ลงในวัตถุ (โดยใช้สไตล์ชีตโดยนัย) และเขียน HTML ที่เป็นผลลัพธ์ไปยังสตรีมการตอบกลับ
หากต้องการลองใช้วิธีนี้ ให้ทำตามขั้นตอนง่ายๆ ที่แสดงด้านล่าง ใช้ Notepad เพื่อคัดลอกและวางและบันทึกไฟล์ทั้งหมดใน c:inetpubwwwroot
1.
สร้างไฟล์ชื่อ books.xml ซึ่งมีข้อความ XML ต่อไปนี้ จดบันทึกการอ้างอิงถึงสไตล์ชีตของ books.xsl นอกเหนือจากนั้น ไฟล์นี้มีเพียงข้อมูลเท่านั้น
<?xml เวอร์ชัน = "1.0"?>
<?xml-stylesheet type="text/xsl" href="books.xsl" ?>
<แคตตาล็อก>
<book id="bk101">
<author>กัมบาร์เดลลา, แมทธิว</author>
<title>คู่มือนักพัฒนา XML</title>
</หนังสือ>
<book id="bk102">
<author>รอลส์, คิม</author>
<title>ฝนเที่ยงคืน</title>
</หนังสือ>
</แคตตาล็อก>
2.
จากนั้น สร้างไฟล์ชื่อ books.xsl ซึ่งมีโค้ดต่อไปนี้ ไฟล์นี้เป็นสไตล์ชีตที่อ้างอิงโดย books.xml ที่สร้างในขั้นตอนที่ 1 ประกอบด้วยข้อมูลที่จำเป็นในการจัดรูปแบบไฟล์ XML ด้านบนให้เป็นหน้า HTML อย่างถูกต้อง และยังมีสคริปต์บนหน้า HTML อีกด้วย
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet เวอร์ชัน = "1.0"
xmlns:xsl=" http://www.w3.org/1999/XSL/Transform ">
<xsl:output method="html" indent="yes"/>
<xsl:แม่แบบที่ตรงกัน="/">
<html>
<หัว>
<title>ทดสอบ</title>
</หัว>
<ภาษาสคริปต์ = "JScript">
ฟังก์ชั่น Test_OnLoad()
-
var objXML = ActiveXObject ใหม่ ("MSXML2.DOMDocument");
objXML.async=false;
objXML.load("books.xml");
การแจ้งเตือน (objXML.xml);
objXML=null;
-
</สคริปต์>
<body onload="Test_OnLoad()">
<เส้นขอบตาราง="1">
<xsl:for-each select="catalog/book">
<tr>
<td>
<xsl:value-of select="author"/>
</td>
<td>
<xsl:value-of select="title"/></td>
</tr>
</xsl:สำหรับแต่ละ>
</ตาราง>
</ร่างกาย>
</html>
</xsl:แม่แบบ>
</xsl:สไตล์ชีท>
3.
สุดท้าย สร้างไฟล์ชื่อ books.asp ซึ่งมีโค้ดต่อไปนี้ ไฟล์นี้ใช้เพื่อสร้างออบเจ็กต์ XMLHTTP เท่านั้น โหลดไฟล์ XML สำหรับมัน และเขียนผลลัพธ์ HTML ลงในสตรีมการตอบกลับ
-
สลัว sxh
Response.contentType = "ข้อความ/xml"
ตั้ง sxh = Server.CreateObject("MSXML2.XMLHTTP.3.0")
sxh.open "GET", " http://localhost/books.xml",false
sxh.ส่ง
Response.write sxh.ข้อความตอบกลับ
-
4.
เปิดเบราว์เซอร์ของคุณและไปที่ http://localhost/books.asp
5.
คุณเห็นการแจ้งเตือนที่แสดงข้อมูลที่มี books.xml ซึ่งทำได้โดยสคริปต์ในไฟล์ XSL คุณจะเห็นข้อมูลที่จัดรูปแบบอย่างเรียบร้อยในตารางบนหน้าเว็บ ทำได้โดยใช้รหัส XSL