By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,190 Members | 1,503 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,190 IT Pros & Developers. It's quick & easy.

ASP Page as Remote Function call from Javascript

P: n/a
Hello,

I've been playing with the idea of just how to use an ASP page to provide a
remote function call. In an ideal world this would be a web service but how
can you do it if restricted to ASP 3.0 ?

Idea 1 was to write an ASP page that accepted arguments using the classic
?X=1&Y=2 type of strings and have the page return an ADO disconnected record
set containing the results of the action. This is call very well, and works,
but you do have to allow the browser to create an ADODB.RecordSet in which
to place the results which goes against some security principles.

Idea 2 was to use an <IFRAME> and replace the src for this frame at run time
with the result from an ASP page, again using the ?X=1&Y=2 type of string to
pass in arguments. The results could then come back as a table and be
accessed via the DOM. The problem with this is that the client needs to wait
for the page to be loaded before it can be sure that the contents of the
table is valid and the browser does not seem to allow waits and does not
like busy waits.

Idea 3 - I'm still looking for this ! Does anyone have any ?

Many thanks

Martin
Jul 19 '05 #1
Share this Question
Share on Google+
9 Replies


P: n/a
Martin Waller wrote:
Hello,

I've been playing with the idea of just how to use an ASP page to
provide a remote function call. In an ideal world this would be a web
service but how can you do it if restricted to ASP 3.0 ?

Idea 1 was to write an ASP page that accepted arguments using the
classic ?X=1&Y=2 type of strings and have the page return an ADO
disconnected record set containing the results of the action. This is
call very well, and works, but you do have to allow the browser to
create an ADODB.RecordSet in which to place the results which goes
against some security principles.

Idea 2 was to use an <IFRAME> and replace the src for this frame at
run time with the result from an ASP page, again using the ?X=1&Y=2
type of string to pass in arguments. The results could then come back
as a table and be accessed via the DOM. The problem with this is that
the client needs to wait for the page to be loaded before it can be
sure that the contents of the table is valid and the browser does not
seem to allow waits and does not like busy waits.

Idea 3 - I'm still looking for this ! Does anyone have any ?

Many thanks

Martin


If I understand correctly what you're after, then the answer is XMLHTTP.
Google should supply the rest ...

Bob Barrows
--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.
Jul 19 '05 #2

P: n/a
Hello,

Many thanks for the reply but I'm not sure how that gets around having to do
something like:

x = new ActiveXObject("Microsoft.XMLHTTP");

in the JavaScript which requires the setting / unsetting of a security
option in the browser ?

Martin

"Bob Barrows [MVP]" <re******@NOyahoo.SPAMcom> wrote in message
news:u$**************@tk2msftngp13.phx.gbl...
Martin Waller wrote:
Hello,

I've been playing with the idea of just how to use an ASP page to
provide a remote function call. In an ideal world this would be a web
service but how can you do it if restricted to ASP 3.0 ?

Idea 1 was to write an ASP page that accepted arguments using the
classic ?X=1&Y=2 type of strings and have the page return an ADO
disconnected record set containing the results of the action. This is
call very well, and works, but you do have to allow the browser to
create an ADODB.RecordSet in which to place the results which goes
against some security principles.

Idea 2 was to use an <IFRAME> and replace the src for this frame at
run time with the result from an ASP page, again using the ?X=1&Y=2
type of string to pass in arguments. The results could then come back
as a table and be accessed via the DOM. The problem with this is that
the client needs to wait for the page to be loaded before it can be
sure that the contents of the table is valid and the browser does not
seem to allow waits and does not like busy waits.

Idea 3 - I'm still looking for this ! Does anyone have any ?

Many thanks

Martin


If I understand correctly what you're after, then the answer is XMLHTTP.
Google should supply the rest ...

Bob Barrows
--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.

Jul 19 '05 #3

P: n/a
How about this (uses framesets):

1. Main frame directs "communication" frame to target asp page and then
directs itself to a "waiting" page.
2. Page generated by target asp page includes JavaScript code to redirect
main frame back to original state.

--
Mark Schupp
Head of Development
Integrity eLearning
www.ielearning.com
"Martin Waller" <Ma***********@NOSPAN.com> wrote in message
news:eN**************@TK2MSFTNGP09.phx.gbl...
Hello,

Many thanks for the reply but I'm not sure how that gets around having to do something like:

x = new ActiveXObject("Microsoft.XMLHTTP");

in the JavaScript which requires the setting / unsetting of a security
option in the browser ?

Martin

"Bob Barrows [MVP]" <re******@NOyahoo.SPAMcom> wrote in message
news:u$**************@tk2msftngp13.phx.gbl...
Martin Waller wrote:
Hello,

I've been playing with the idea of just how to use an ASP page to
provide a remote function call. In an ideal world this would be a web
service but how can you do it if restricted to ASP 3.0 ?

Idea 1 was to write an ASP page that accepted arguments using the
classic ?X=1&Y=2 type of strings and have the page return an ADO
disconnected record set containing the results of the action. This is
call very well, and works, but you do have to allow the browser to
create an ADODB.RecordSet in which to place the results which goes
against some security principles.

Idea 2 was to use an <IFRAME> and replace the src for this frame at
run time with the result from an ASP page, again using the ?X=1&Y=2
type of string to pass in arguments. The results could then come back
as a table and be accessed via the DOM. The problem with this is that
the client needs to wait for the page to be loaded before it can be
sure that the contents of the table is valid and the browser does not
seem to allow waits and does not like busy waits.

Idea 3 - I'm still looking for this ! Does anyone have any ?

Many thanks

Martin


If I understand correctly what you're after, then the answer is XMLHTTP.
Google should supply the rest ...

Bob Barrows
--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.


Jul 19 '05 #4

P: n/a
Hello,

One way I've found to get away from the requirement in JavaScript to perform
the new ActiveXObject call is to put the object in the HTML page as it gets
sent to the client and then have the JavaScript call that. See below for an
example. To run this the URL will need to be changed to reflect where you
put it ! In my case it was called junk.asp...

<html>
<head>
<script language="JavaScript">

function Do()
{
alert("Do()");
penguin.open("get","http://localhost/smartanalysis/junk.asp",false);
alert(1);
penguin.send();
alert(2);
alert(penguin.responseText);
}

</script>
<object
classid="clsid:F6D90F16-9C73-11D3-B32E-00C04F990BB4"
id="penguin">
</object>
</head>
<body onLoad = "Do()">
</body>
</html>

Martin
"Mark Schupp" <ms*****@ielearning.com> wrote in message
news:u$*************@TK2MSFTNGP15.phx.gbl...
How about this (uses framesets):

1. Main frame directs "communication" frame to target asp page and then
directs itself to a "waiting" page.
2. Page generated by target asp page includes JavaScript code to redirect
main frame back to original state.

--
Mark Schupp
Head of Development
Integrity eLearning
www.ielearning.com
"Martin Waller" <Ma***********@NOSPAN.com> wrote in message
news:eN**************@TK2MSFTNGP09.phx.gbl...
Hello,

Many thanks for the reply but I'm not sure how that gets around having
to do
something like:

x = new ActiveXObject("Microsoft.XMLHTTP");

in the JavaScript which requires the setting / unsetting of a security
option in the browser ?

Martin

"Bob Barrows [MVP]" <re******@NOyahoo.SPAMcom> wrote in message
news:u$**************@tk2msftngp13.phx.gbl...
Martin Waller wrote:
> Hello,
>
> I've been playing with the idea of just how to use an ASP page to
> provide a remote function call. In an ideal world this would be a web > service but how can you do it if restricted to ASP 3.0 ?
>
> Idea 1 was to write an ASP page that accepted arguments using the
> classic ?X=1&Y=2 type of strings and have the page return an ADO
> disconnected record set containing the results of the action. This is > call very well, and works, but you do have to allow the browser to
> create an ADODB.RecordSet in which to place the results which goes
> against some security principles.
>
> Idea 2 was to use an <IFRAME> and replace the src for this frame at
> run time with the result from an ASP page, again using the ?X=1&Y=2
> type of string to pass in arguments. The results could then come back > as a table and be accessed via the DOM. The problem with this is that > the client needs to wait for the page to be loaded before it can be
> sure that the contents of the table is valid and the browser does not > seem to allow waits and does not like busy waits.
>
> Idea 3 - I'm still looking for this ! Does anyone have any ?
>
> Many thanks
>
> Martin

If I understand correctly what you're after, then the answer is XMLHTTP. Google should supply the rest ...

Bob Barrows
--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.



Jul 19 '05 #5

P: n/a
"Martin Waller" wrote:
I've been playing with the idea of just how to use an ASP page to provide a remote function call. In an ideal world this would be a web service but how can you do it if restricted to ASP 3.0 ?
Idea 3 - I'm still looking for this ! Does anyone have any ?


I'm making some assumptions here, but I think: you want the browser to get
some data that the server has. You want the browser to make a client-side
call to get this data without the current page being reloaded. And you
would
like this to be reasonably cross-browser compliant, and not require any
funky
client objects (ActiveXObjects, Object tags, XMLHTTP, etc).

If the above is correct, then this cool trick might work for you.
Put this function on your "main" page:

function getNewJSFile(querystring) {
var s = document.createElement("script");
s.setAttribute("src", "http://you.com/ReturnsJavascriptArray.asp?" +
querystring);
s.setAttribute("type", "text/javascript");
document.getElementsByTagName("head")[0].appendChild(s);
}

That function above is ordinary JavaScript which works in almost all
browsers. (No Netscape 4 or earlier) Now, you can add calls to
getNewJSFile() on your "main" page like this:

<a href="javascript:getNewJSFile('yr=1999&data=sales' )">Show 1999
Sales</a>
<a href="javascript:getNewJSFile('yr=2000&data=sales' )">Show 2000
Sales</a>

When a user clicks these links, a new Javascript file will be downloaded
by the client. But, the file is actually an ASP3.0 page
(ReturnsJavascriptArray.asp)
which returns Javascript. This allows you to query a database and format
the
response as a Javascript array, like this:

Sales_1999(1, 'Jan', '$234.56');
Sales_1999(2, 'Feb', '$123.45');
Sales_1999(3, 'Mar', '$456.78');

The response can even include functions and function calls:

function show_Sales_1999() {
...code to loop thru array and alert() the sales data
}
show_Sales_1999()

Good Luck!
-Rob
Jul 19 '05 #6

P: n/a
Rob,

Nice one !

It seems to work but the one thing I'm not sure about is wether the
appendChild() operation is synchronous or not ? Do you have any idea ?

Many thanks...

Martin

"goinoutwest" <go*********@hotmail.com> wrote in message
news:uG**************@TK2MSFTNGP09.phx.gbl...
"Martin Waller" wrote:
I've been playing with the idea of just how to use an ASP page to
provide a
remote function call. In an ideal world this would be a web service but

how
can you do it if restricted to ASP 3.0 ?
Idea 3 - I'm still looking for this ! Does anyone have any ?


I'm making some assumptions here, but I think: you want the browser to get
some data that the server has. You want the browser to make a client-side
call to get this data without the current page being reloaded. And you
would
like this to be reasonably cross-browser compliant, and not require any
funky
client objects (ActiveXObjects, Object tags, XMLHTTP, etc).

If the above is correct, then this cool trick might work for you.
Put this function on your "main" page:

function getNewJSFile(querystring) {
var s = document.createElement("script");
s.setAttribute("src", "http://you.com/ReturnsJavascriptArray.asp?" +
querystring);
s.setAttribute("type", "text/javascript");
document.getElementsByTagName("head")[0].appendChild(s);
}

That function above is ordinary JavaScript which works in almost all
browsers. (No Netscape 4 or earlier) Now, you can add calls to
getNewJSFile() on your "main" page like this:

<a href="javascript:getNewJSFile('yr=1999&data=sales' )">Show 1999
Sales</a>
<a href="javascript:getNewJSFile('yr=2000&data=sales' )">Show 2000
Sales</a>

When a user clicks these links, a new Javascript file will be downloaded
by the client. But, the file is actually an ASP3.0 page
(ReturnsJavascriptArray.asp)
which returns Javascript. This allows you to query a database and format
the
response as a Javascript array, like this:

Sales_1999(1, 'Jan', '$234.56');
Sales_1999(2, 'Feb', '$123.45');
Sales_1999(3, 'Mar', '$456.78');

The response can even include functions and function calls:

function show_Sales_1999() {
...code to loop thru array and alert() the sales data
}
show_Sales_1999()

Good Luck!
-Rob

Jul 19 '05 #7

P: n/a
"Martin Waller" wrote:
Rob,

Nice one !

It seems to work but the one thing I'm not sure about is wether the
appendChild() operation is synchronous or not ? Do you have any idea ?

Many thanks...

Martin


appendChild() is synchronous. But, I don't think when you use it to append
a new script block to the HEAD of a webpage that the code execution stops
and waits for the browser to "see" this new script block and finish
downloading
the file referenced as the SRC of the script block. (did that make sense?)

I have not tested this, but it should be easy to confirm.
-r
Jul 19 '05 #8

P: n/a
Rob,

I tried it and as you say the execution does not stop so the loading of the
script is happening after I'm testing for the results so I can't really use
that technique !

Many thanks for trying...

Martin

"goinoutwest" <go*********@hotmail.com> wrote in message
news:#x*************@TK2MSFTNGP11.phx.gbl...
"Martin Waller" wrote:
Rob,

Nice one !

It seems to work but the one thing I'm not sure about is wether the
appendChild() operation is synchronous or not ? Do you have any idea ?

Many thanks...

Martin

appendChild() is synchronous. But, I don't think when you use it to

append a new script block to the HEAD of a webpage that the code execution stops
and waits for the browser to "see" this new script block and finish
downloading
the file referenced as the SRC of the script block. (did that make sense?)
I have not tested this, but it should be easy to confirm.
-r

Jul 19 '05 #9

P: n/a
"Martin Waller" wrote:
I tried it and as you say the execution does not stop so the loading of the script is happening after I'm testing for the results so I can't really use that technique !


That's part of the trick. You probably have some function which handles
the task of "testing for results", right?

You need to put the call to that function as the last line of that newly
downloaded Javascript file.
For example, here is a simplified version of the "main" page:
<html>
<a href="javascript:getNewJSFile('data=sales')">Show Sales</a>
<script>
function getNewJSFile(querystring) {...}
function handleNewData(arrayName) {...}
</script>
</html>

And here's a simplified version of that new javascript file that will be
downloaded when that link is clicked:
/* begin code */
SalesData(1, '$234.56');
SalesData(2, '$123.45');
SalesData(3, '$456.78');
handleNewData('SalesData');
/* end code */

So, you can see that the data will arrive just before the call to the
function
which is designed to handle that data. It will always work! My guess is
that you were doing something equivalent to this:
<a
href="javascript:getNewJSFile('data=sales');handle NewData('SalesData');">Sho
w Sales</a>
In that case, the call to handle the data is going to happen before the data
arrives.
That's bad.

-Rob
Jul 19 '05 #10

This discussion thread is closed

Replies have been disabled for this discussion.