В чем разница между <%%> и <script language = "vbscript" runat = "server"> в классическом asp? - PullRequest
7 голосов
/ 19 сентября 2009

Я не могу найти много документации в Интернете

На данный момент очевидным отличием является то, что вы не можете смешивать html и vbscript, используя тег script

например, это нормально

<% public sub display_literal() %>
  literal
&lt% end sub %>

но с тегом script вы должны


<script language="vbscript" runat="server">
public sub display_literal2()
    response.write "literal2</br>"
end sub
</script>

на этой странице

http://www.newobjects.com/pages/ndl/alp/asp-structure.htm

это говорит о том, что

В классическом ASP сценарий, написанный на языке сценариев по умолчанию для страницы (т. Е. Язык, предполагаемый для тегов <%%>), выполняется вторым - например, весь код скрипта в тегах <%%> инициализируется после всех скриптов .

но я сделал пару тестов и не смог проверить ...

Я спрашиваю, потому что у меня был скрипт (у меня его сейчас нет), который с помощью <%%> дал мне ошибку, меняя его на тег , я решил проблему Хотелось бы знать почему ....

в любом случае, я думаю, что мы должны использовать тег для функций и процедур, которые должны вызываться из тегов <%%> ... верно?

Ответы [ 2 ]

10 голосов
/ 19 сентября 2009

Прежде всего вы должны понимать, что существует разница в способе обработки тегов script на стороне сервера в зависимости от того, является ли указанный язык тем же, что и язык по умолчанию для страницы.

Порядок такой: -

  1. Запускать все сценарии в тегах <script runat="server", если указанный язык не соответствует языку по умолчанию. Они выполняются в порядке документов.
  2. Запустите скрипт по умолчанию. Это означает, что нужно выполнить подразумеваемую запись в ответ, если на странице есть статическое содержимое (содержимое не в тегах runat="server" или внутри <% %>) и любой промежуточный код в <% %>, опять же, в порядке документа.
  3. Запустить любой код на глобальном уровне, найденный в тегах <script runat="server", где язык соответствует языку сценариев по умолчанию.

Обратите внимание, что все сценарии имеют начальный анализ перед выполнением этапа 1, поэтому любые функции, которые могут быть определены сценариями, запущенными на этапе 3, будут доступны для вызова из этапа 1.

1 голос
/ 16 июля 2010

У меня только что возникла проблема по этому вопросу, и для практических целей код внутри тегов <%%> выполняет перед кодом внутри .

Кажется, что на объявление функций и процедур не влияет это различие в том, как IIS понимает классические теги ASP - по крайней мере, поскольку я не использую условную загрузку кода с помощью "Server.Execute ».

мой сервер работает под управлением Microsoft-IIS / 5.1, как в Request.ServerVariables ("SERVER_SOFTWARE").

...