¿Cuál es la diferencia entre <% %> y <script language=“vbscript” runat=“server”> en ASP clásico?

StackOverflow https://stackoverflow.com/questions/1447822

Pregunta

No pude encontrar mucha documentación en la web.

Hasta ahora, la diferencia obvia parece ser que no se puede mezclar html y vbscript usando la etiqueta "script".

por ejemplo, esto está bien

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

pero con la etiqueta script deberías

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

en esta página

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

dice que

En ASP clásico, el script escrito en el lenguaje de script predeterminado para la página (es decir,el lenguaje asumido para las etiquetas <% %>) se ejecuta en segundo lugar - p.e.todo el código de secuencia de comandos en las etiquetas <% %> se inicializa después de todas las secuencias de comandos <SCRIPT RUNAT=SERVER ...>.

pero hice un par de pruebas y no pude comprobarlo...

Lo pregunto porque tenía un script (no lo tengo a la mano ahora mismo) que al usar <% %> me daba error, cambiarlo a la etiqueta <script> resolvió el problema, pero me gustaría saber porque....

de todos modos, supongo que deberíamos usar la etiqueta <script> para funciones y procedimientos que se llamarán desde etiquetas <% %>...¿bien?

¿Fue útil?

Solución

En primer lugar es necesario entender que hay una diferencia en la forma etiquetas script del lado del servidor se manejan en función de si el idioma especificado es el mismo que el idioma por defecto de la página.

El orden es el siguiente: -

  1. Ejecutar todos los scripts en las etiquetas <script runat="server" donde el idioma especificado no coincide con el idioma por defecto. Estos se ejecutan en el orden del documento.
  2. Ejecutar el script predeterminado. Eso significa realizar la implícita escribe en la respuesta donde hay contenido estático en la página (las cosas no en las etiquetas o en el interior runat="server" <% %>) y cualquier código de intervenir en <% %> de nuevo en el orden del documento obviamente.
  3. Ejecutar cualquier código a nivel mundial se encuentran en las etiquetas <script runat="server" donde el idioma coincide con el lenguaje de script predeterminado.

Tenga en cuenta que toda la escritura tiene un análisis sintáctico inicial antes de la ejecución de la fase 1, por lo tanto, cualquiera de las funciones que pueden ser definidas por ejecutar secuencias de comandos en la fase 3 estará disponible para llamar desde la fase 1.

Otros consejos

Acabo de tener un problema con este asunto y, para fines prácticos, el código dentro de las etiquetas <% %> ejecuta antes del código dentro de <script runat="server"> </script>.

La declaración de funciones y procedimientos parece no verse afectado por esta diferencia en la forma en que IIS entiende las etiquetas ASP clásicas, al menos porque no uso la carga de código condicional con "Server.Execute".

mi servidor ejecuta Microsoft-IIS/5.1 como en Request.ServerVariables("SERVER_SOFTWARE").

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top