печаль для вас [Оригинал]
Уважаемый доктор GUI:
У меня вопрос по поводу XML. Я публикую страницу ASP через XMLHTTP, отправляю данные обратно в виде HTML и выполняю object.innerHTML для элемента div, ячейки таблицы или любого элемента.
Проблема, с которой я столкнулся, заключается в том, что как только я создаю форму на странице сервера ASP и отправляю ее обратно в виде HTML, все работает нормально. Но мне также нужна проверка страницы на стороне клиента, поэтому я помещаю ссылку на страницу JScript в тело HTML-ответа, который планирую отправить обратно. После этого скрипт не запустится.
Когда я включаю фактическую ссылку на источник JScript на родительскую страницу, она работает нормально. Это потому, что код JScript не загружается во время выполнения? Можно ли ответить на сообщение XMLHTTP, не возвращая код JScript, и заставить его работать? Могут ли функции JScript генерироваться на лету для страниц, которые я создаю?
Другой способ, которым я не пробовал это сделать, — это опубликовать данные XML через XMLHTTP, затем отправить их обратно как данные XML, а затем использовать таблицу стилей XSL для их преобразования. Я думаю, что таким образом можно определить функции JScript. Но такой подход кажется слишком сложным. Есть ли у вас какие-либо предложения или ответы?
Спасибо за
ответ от доктора
Питера Сунга
. Графический интерфейс пользователя:Да, Питер, вы можете вернуть код Microsoft JScript в ответ на сообщение/получение XMLHTTP и выполнить этот код. Сделать это — все равно, что получить кусок торта и съесть его позже. Как вы могли догадаться, лучший способ сделать это — использовать таблицу стилей XSL; это легко сделать, как только вы вернете все типы в нормальное состояние. Доктор GUI может даже привести быстрый пример. (Конечно, есть и другие решения. Пока ответ содержит правильные заголовки и символы в правильном порядке, браузер будет интерпретировать ответ так, чтобы ответ работал правильно. При необходимости вы можете использовать конкатенацию строк для генерации ответа. )
Ниже В своем примере доктор GUI использует JScript для кода на стороне клиента и VBScript (Microsoft Visual Basic Scripting Edition) на странице ASP. Принятая стратегия такова: файл XML содержит только данные (и ссылку на таблицу стилей). Файл XSL содержит все HTML-форматирование, необходимое для формирования полноценной страницы (включая скрипты). Страница ASP по существу состоит из нескольких вызовов для создания объекта XMLHTTP, загрузки XML-файла в объект (с использованием неявной таблицы стилей) и записи полученного HTML в поток ответов.
Чтобы попробовать этот метод, выполните простые шаги, показанные ниже. С помощью Блокнота скопируйте, вставьте и сохраните все файлы в папке c:inetpubwwwroot.
1.
Создайте файл с именем book.xml, содержащий следующий текст XML. Запишите ссылку на таблицу стилей book.xsl. Кроме этого, этот файл содержит только данные.
<?xml версия="1.0"?>
<?xml-stylesheet type="text/xsl" href="books.xsl" ?>
<каталог>
<книга id="bk101">
<author>Гамбарделла, Мэтью</author>
<title>Руководство разработчика XML</title>
</книга>
<книга id="bk102">
<author>Раллс, Ким</author>
<title>Полуночный дождь</title>
</книга>
</каталог>
2.
Затем создайте файл с именем book.xsl, содержащий следующий код. Этот файл представляет собой таблицу стилей, на которую ссылается файл book.xml, созданный на шаге 1. Он содержит информацию, необходимую для правильного форматирования вышеуказанного XML-файла в HTML-страницу и даже для включения сценариев на HTML-страницу.
<?xml version="1.0"coding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl=" http://www.w3.org/1999/XSL/Transform ">
<xsl:output метод="html" indent="да"/>
<xsl:template match="/">
<html>
<голова>
<title>Тест</title>
</голова>
<script Language="JScript">
функция Test_OnLoad()
{
вар objXML = новый ActiveXObject("MSXML2.DOMDocument");
objXML.async = ложь;
objXML.load("books.xml");
предупреждение (objXML.xml);
objXML = ноль;
}
</скрипт>
<body onload="Test_OnLoad()">
<таблица граница="1">
<xsl:for-each select="catalog/book">
<тр>
<тд>
<xsl:value-of select="author"/>
</td>
<тд>
<xsl:value-of select="title"/></td>
</tr>
</xsl:for-each>
</таблица>
</тело>
</html>
</xsl:шаблон>
</xsl:таблица стилей>
3.
Наконец, создайте файл с именем books.asp, содержащий следующий код. Этот файл используется только для создания объекта XMLHTTP, загрузки для него XML-файла и записи полученного HTML-кода в поток ответов.
<%
тусклый схш
Response.contentType = "текст/xml"
set sxh = Server.CreateObject("MSXML2.XMLHTTP.3.0")
sxh.open "GET"," http://localhost/books.xml",false
sxh.send
Response.write sxh.responsetext
%>
4.
Откройте браузер и перейдите по адресу http://localhost/books.asp .
5.
Вы увидите предупреждение, показывающее данные, содержащие файл book.xml. Это делается с помощью сценария в файле XSL. Вы также увидите данные, аккуратно отформатированные в виде таблицы на веб-странице. Это делается с помощью кода XSL.