Home All Groups Group Topic Archive Search About

JScript/ASP prototype doesn't work from an include?



Author
17 Mar 2005 2:49 AM
Jonathan Dodds
I have two files in an ASP project I created with VI 6.0: circle.inc and
default.asp.

circle.inc:

// circle.inc

function Circle (xPoint, yPoint, radius) {
    this.x = xPoint;  // The x component of the center of the circle.
    this.y = yPoint;  // The y component of the center of the circle.
    this.r = radius;  // The radius of the circle.
}
Circle.prototype.pi = Math.PI;
Circle.prototype.area = function () {
    return this.pi * this.r * this.r;
}



default.asp:

<%@ language="jscript" %>
<html>
<head>
<script language="javascript" runat="server" src="circle.inc"></script>
</head>
<body>
<%
var aCircle = new Circle(5, 11, 99);
for (var x in aCircle)
{
    Response.Write(x + " = " + aCircle[x] + " (" + typeof(aCircle[x]) +
")<br>");
}
%>
</body>
</html>



I expect output that look like this:

area = function () { return this.pi * this.r * this.r; } (function)
pi = 3.141592653589793 (number)
x = 5 (number)
y = 11 (number)
r = 99 (number)

This works when the circle constructor and prototype are in the default.asp
file but when I move the code to the circle.inc include file I lose the
members that are added by the prototype. i.e.:

x = 5 (number)
y = 11 (number)
r = 99 (number)

When I use the include file it finds the constructor but loses the
prototype? What the heck!?

I tried using a #include directive instead of the script element. It made no
difference. I searched the MSDN to see if there was some mention of this
issue. I didn't find anything relevant.

Is this a bug or am I including this file incorrectly?

Thanks.

Author
17 Mar 2005 3:21 AM
Jason Brown [MSFT]
don't use a server-side script block to include the code. use an actual SSI

<!--#include virtual="/path/here.inc"-->

code in <% %> delimiters and code in <script> blocks execute in different
contexts, hence your problem here


--
Jason Brown
Microsoft GTSC, IIS

This posting is provided "AS IS" with no warranties, and confers no rights.


Show quote
"Jonathan Dodds" <NO_REPLY> wrote in message
news:eYhgxupKFHA.3336@TK2MSFTNGP10.phx.gbl...
>I have two files in an ASP project I created with VI 6.0: circle.inc and
> default.asp.
>
> circle.inc:
>
> // circle.inc
>
> function Circle (xPoint, yPoint, radius) {
>    this.x = xPoint;  // The x component of the center of the circle.
>    this.y = yPoint;  // The y component of the center of the circle.
>    this.r = radius;  // The radius of the circle.
> }
> Circle.prototype.pi = Math.PI;
> Circle.prototype.area = function () {
>    return this.pi * this.r * this.r;
> }
>
>
>
> default.asp:
>
> <%@ language="jscript" %>
> <html>
> <head>
> <script language="javascript" runat="server" src="circle.inc"></script>
> </head>
> <body>
> <%
> var aCircle = new Circle(5, 11, 99);
> for (var x in aCircle)
> {
>    Response.Write(x + " = " + aCircle[x] + " (" + typeof(aCircle[x]) +
> ")<br>");
> }
> %>
> </body>
> </html>
>
>
>
> I expect output that look like this:
>
> area = function () { return this.pi * this.r * this.r; } (function)
> pi = 3.141592653589793 (number)
> x = 5 (number)
> y = 11 (number)
> r = 99 (number)
>
> This works when the circle constructor and prototype are in the
> default.asp
> file but when I move the code to the circle.inc include file I lose the
> members that are added by the prototype. i.e.:
>
> x = 5 (number)
> y = 11 (number)
> r = 99 (number)
>
> When I use the include file it finds the constructor but loses the
> prototype? What the heck!?
>
> I tried using a #include directive instead of the script element. It made
> no
> difference. I searched the MSDN to see if there was some mention of this
> issue. I didn't find anything relevant.
>
> Is this a bug or am I including this file incorrectly?
>
> Thanks.
>
>
Author
17 Mar 2005 3:44 AM
Jonathan Dodds
Thanks.

I tried both ways: two <script> blocks and two sets of <% %> blocks. As long
as I match, the code works correctly.


Show quote
"Jason Brown [MSFT]" <i-brj***@online.microsoft.com> wrote in message
news:ekIsbBqKFHA.3652@TK2MSFTNGP10.phx.gbl...
> don't use a server-side script block to include the code. use an actual
SSI
>
> <!--#include virtual="/path/here.inc"-->
>
> code in <% %> delimiters and code in <script> blocks execute in different
> contexts, hence your problem here
>
>
> --
> Jason Brown
> Microsoft GTSC, IIS
>
> This posting is provided "AS IS" with no warranties, and confers no
rights.
>
>
> "Jonathan Dodds" <NO_REPLY> wrote in message
> news:eYhgxupKFHA.3336@TK2MSFTNGP10.phx.gbl...
> >I have two files in an ASP project I created with VI 6.0: circle.inc and
> > default.asp.
> >
> > circle.inc:
> >
> > // circle.inc
> >
> > function Circle (xPoint, yPoint, radius) {
> >    this.x = xPoint;  // The x component of the center of the circle.
> >    this.y = yPoint;  // The y component of the center of the circle.
> >    this.r = radius;  // The radius of the circle.
> > }
> > Circle.prototype.pi = Math.PI;
> > Circle.prototype.area = function () {
> >    return this.pi * this.r * this.r;
> > }
> >
> >
> >
> > default.asp:
> >
> > <%@ language="jscript" %>
> > <html>
> > <head>
> > <script language="javascript" runat="server" src="circle.inc"></script>
> > </head>
> > <body>
> > <%
> > var aCircle = new Circle(5, 11, 99);
> > for (var x in aCircle)
> > {
> >    Response.Write(x + " = " + aCircle[x] + " (" + typeof(aCircle[x]) +
> > ")<br>");
> > }
> > %>
> > </body>
> > </html>
> >
> >
> >
> > I expect output that look like this:
> >
> > area = function () { return this.pi * this.r * this.r; } (function)
> > pi = 3.141592653589793 (number)
> > x = 5 (number)
> > y = 11 (number)
> > r = 99 (number)
> >
> > This works when the circle constructor and prototype are in the
> > default.asp
> > file but when I move the code to the circle.inc include file I lose the
> > members that are added by the prototype. i.e.:
> >
> > x = 5 (number)
> > y = 11 (number)
> > r = 99 (number)
> >
> > When I use the include file it finds the constructor but loses the
> > prototype? What the heck!?
> >
> > I tried using a #include directive instead of the script element. It
made
> > no
> > difference. I searched the MSDN to see if there was some mention of this
> > issue. I didn't find anything relevant.
> >
> > Is this a bug or am I including this file incorrectly?
> >
> > Thanks.
> >
> >
>
>
Author
17 Mar 2005 3:25 AM
Aaron [SQL Server MVP]
I believe you have been bitten by the "order matters" nature of <%%> and
<script> delimiters.

http://www.aspfaq.com/2045

You could try enclosing the inline code with <script> instead of <% or you
could use <% in the .inc file and use a standard <!--#include instead of the
script-tag style.

A


On 3/16/05 9:49 PM, in article eYhgxupKFHA.3***@TK2MSFTNGP10.phx.gbl,
Show quote
"Jonathan Dodds" <NO_REPLY> wrote:

> I have two files in an ASP project I created with VI 6.0: circle.inc and
> default.asp.
>
> circle.inc:
>
> // circle.inc
>
> function Circle (xPoint, yPoint, radius) {
>     this.x = xPoint;  // The x component of the center of the circle.
>     this.y = yPoint;  // The y component of the center of the circle.
>     this.r = radius;  // The radius of the circle.
> }
> Circle.prototype.pi = Math.PI;
> Circle.prototype.area = function () {
>     return this.pi * this.r * this.r;
> }
>
>
>
> default.asp:
>
> <%@ language="jscript" %>
> <html>
> <head>
> <script language="javascript" runat="server" src="circle.inc"></script>
> </head>
> <body>
> <%
> var aCircle = new Circle(5, 11, 99);
> for (var x in aCircle)
> {
>     Response.Write(x + " = " + aCircle[x] + " (" + typeof(aCircle[x]) +
> ")<br>");
> }
> %>
> </body>
> </html>
>
>
>
> I expect output that look like this:
>
> area = function () { return this.pi * this.r * this.r; } (function)
> pi = 3.141592653589793 (number)
> x = 5 (number)
> y = 11 (number)
> r = 99 (number)
>
> This works when the circle constructor and prototype are in the default.asp
> file but when I move the code to the circle.inc include file I lose the
> members that are added by the prototype. i.e.:
>
> x = 5 (number)
> y = 11 (number)
> r = 99 (number)
>
> When I use the include file it finds the constructor but loses the
> prototype? What the heck!?
>
> I tried using a #include directive instead of the script element. It made no
> difference. I searched the MSDN to see if there was some mention of this
> issue. I didn't find anything relevant.
>
> Is this a bug or am I including this file incorrectly?
>
> Thanks.
>
>
Author
17 Mar 2005 4:12 AM
Jonathan Dodds
Thanks Aaron. That is exactly the problem.

Show quote
"Aaron [SQL Server MVP]" <ten.xoc@dnartreb.noraa> wrote in message
news:BE5E62C2.38DD%ten.xoc@dnartreb.noraa...
> I believe you have been bitten by the "order matters" nature of <%%> and
> <script> delimiters.
>
> http://www.aspfaq.com/2045
>
> You could try enclosing the inline code with <script> instead of <% or you
> could use <% in the .inc file and use a standard <!--#include instead of
the
> script-tag style.
>
> A
>
>
> On 3/16/05 9:49 PM, in article eYhgxupKFHA.3***@TK2MSFTNGP10.phx.gbl,
> "Jonathan Dodds" <NO_REPLY> wrote:
>
> > I have two files in an ASP project I created with VI 6.0: circle.inc and
> > default.asp.
> >
> > circle.inc:
> >
> > // circle.inc
> >
> > function Circle (xPoint, yPoint, radius) {
> >     this.x = xPoint;  // The x component of the center of the circle.
> >     this.y = yPoint;  // The y component of the center of the circle.
> >     this.r = radius;  // The radius of the circle.
> > }
> > Circle.prototype.pi = Math.PI;
> > Circle.prototype.area = function () {
> >     return this.pi * this.r * this.r;
> > }
> >
> >
> >
> > default.asp:
> >
> > <%@ language="jscript" %>
> > <html>
> > <head>
> > <script language="javascript" runat="server" src="circle.inc"></script>
> > </head>
> > <body>
> > <%
> > var aCircle = new Circle(5, 11, 99);
> > for (var x in aCircle)
> > {
> >     Response.Write(x + " = " + aCircle[x] + " (" + typeof(aCircle[x]) +
> > ")<br>");
> > }
> > %>
> > </body>
> > </html>
> >
> >
> >
> > I expect output that look like this:
> >
> > area = function () { return this.pi * this.r * this.r; } (function)
> > pi = 3.141592653589793 (number)
> > x = 5 (number)
> > y = 11 (number)
> > r = 99 (number)
> >
> > This works when the circle constructor and prototype are in the
default.asp
> > file but when I move the code to the circle.inc include file I lose the
> > members that are added by the prototype. i.e.:
> >
> > x = 5 (number)
> > y = 11 (number)
> > r = 99 (number)
> >
> > When I use the include file it finds the constructor but loses the
> > prototype? What the heck!?
> >
> > I tried using a #include directive instead of the script element. It
made no
> > difference. I searched the MSDN to see if there was some mention of this
> > issue. I didn't find anything relevant.
> >
> > Is this a bug or am I including this file incorrectly?
> >
> > Thanks.
> >
> >
>

AddThis Social Bookmark Button