Вы попали в ограничение двигателя asp прямо здесь.
Код в <script runat=server>
блоках может выполняться в разное время.
Порядок выполнения серверного сценария
Встроенный серверный сценарий выполняется последовательно сверху вниз.Вы можете определить вызываемые подпрограммы (функции или подпрограммы) в серверном скрипте, и они будут вызываться по мере необходимости.
Все встроенные скрипты должны быть на одном языке, а именно на языке, указанном в директиве @ вверхустраницы.Следовательно, вы не можете смешивать языки сценариев во встроенном сценарии.
"Но подождите!"Вы могли бы сказать.Теоретически возможно поместить встроенный скрипт в элемент <SCRIPT>
, то есть иметь скрипт в элементе, который не является частью функции или подпрограммы, как в следующем примере:
<% Response.Write("Some inline script<BR>")%>
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Response.Write("Script in a SCRIPT element<BR>")
</SCRIPT>
Да, вы можете сделать это.* Тем не менее, вы находитесь в зависимости от порядка выполнения процессора IIS ASP. *
Упорядочение блоков сценариев
Когда выявляются языками смешения, порядок, в котором блоки <SCRIPT>
появляются на странице, может повлиять на их правильную работу.Рассмотрим этот простой случай встроенного сценария VBScript, вызывающего функцию, написанную на JScript:
<SCRIPT LANGUAGE="VBScript">
' Calls a JScript function
aNumber = 2
doubledNumber = doubleMe(aNumber)
document.write("The answer is " & doubledNumber)
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
function doubleMe(aNumber){
return aNumber * 2;
}
</SCRIPT>
Это не будет работать.Более конкретно, оператор document.write записывает пустую строку на страницу.Зачем?Поскольку во время обработки блока VBScript следующий блок JScript <SCRIPT>
еще не был прочитан, проанализирован и доступен для страницы.Когда браузер обрабатывает блоки скриптов на странице, он работает сверху вниз.
В этом случае простое изменение порядка блоков скриптов решает проблему.И на самом деле, этот тип сценария не так уж и распространен - по большей части, <SCRIPT>
блоки содержат функции и подпрограммы, которые не будут вызываться до тех пор, пока страница не будет полностью загружена и все элементы не будут доступны.Тем не менее, вам следует помнить о том, что страницы обрабатываются линейно и что <SCRIPT>
блоки на разных языках обрабатываются отдельно.
Чтобы узнать больше, посетите эту базу знаний MSDNстатья .