欢迎光临
我们一直在努力

ASP精华文摘-003

建站超值云服务器,限时71元/月

来源:www.yesky.com

转贴-如何在不刷新页面的情况下调用远程asp (2000.03.30)

rs技术的一个具体例子
在前面的帖子中,我介绍了rs的基本工作原理,显然如果将rs技术运用在一
个网站的设计中将会有很多非凡的作用(尤其是它的那个最大的优点,可以在不刷
新页面的情况下调用服务端的代码)。正是因为这个特点,你就可以象在编写一个
传统的c/s模式的程序一样,对数据库的数据进行处理了(我想大家一定很想知道
具体应该如何来实现了,下面将给出一个具体的例子,调试这个破程序几乎快把
我给累死,呵呵。)

从前面的描述可以看到,要使用rs技术就需要客户端和服务端满足下面两个
条件:
1。客户端只需要支持java applet即可
2。而服务端只需要支持asp即可
换句话说,就是rs技术是完全独立与浏览器的(当然浏览器至少需要满足支持ja
va
和javascript),你可以在ie中使用,也可以完全在
nc中使用,这也是区别与rds技术的一个显著特点。
在能够灵活运用rs技术前,先要说明一个问题,就是前面也曾经提到过的"
异步调用”
的问题。也正是因为有异步调用,才能够实现你只刷新页面的某一部分而不用刷

整个页面。
由于它的这个特点,你可以让服务端来实现在你浏览页面的同时
对你输入数据的合法性检查(当然这可以是一系列很复杂的合法性检查,例如需

将用户输入的数据和数据库内已有的数据进行对比等,这个可不是客户端的js能
够解决的)
然后当服务端返回检查结果后,你再进行相应的操作(例如弹出一个对话框告诉
用户
输入出错等等)
异步调用时的语法如下:
rsexecute(serverurl, functionname, param_list)
第一个参数是你想调用的asp页面的完整的url路径
第二个参数是你想调用函数的名称
后面的就是该函数需要的输入参数了
如果你想调用的函数需要两个输入参数的话,就是这样的写法:
rsexecute(serverurl, functionname, f_arg_1, f_arg_2)
当进行调用时有两种写法,
一种是有返回结果的调用方式:
objresult = rsexecute(serverurl, functionname, f_arg_1, f_arg_2);

另外一种则是没有返回结果的调用方式:
rsexecute(url, func_name, f_arg_1, f_arg_2, callbackfunction);
这种调用方式要特别的注意,其中的callbackfunction是客户端的一个js函数
它表示一但rs执行完毕服务端上的调用,就会马上调用这个函数,并把结果返回
到这个
函数中去。
一个典型的callbackfunction函数应该是这样的结构:
function callbackfunction(objresult) {
//你自己的处理过程
}
其中唯一的输入参数objresult就是rs调用的返回值.
下面我们假设这样一种情况:
用户在浏览器中输入了用户的e-mail地址,然后用户离开了e-mail地址输入

进入接下来的输入过程,这个时候就是rs该上场了,它根据用户输入的地址在
服务端的数据库中查询这个地址,就可以判断出这个用户是否已经存在,然后
把结果返回给客户端,在客户端再使用dhtml技术在一个叫"showresult"的输入框

里面提示用户以前输入的信息。
function callbackfunc(objresult) {
// 提示用户的信息
window[objresult.context].value = objresult.return_value;
}
而rsexecute()应该这么调用
rsexecute(serverurl, functionname, f_arg_1, callbackfunc, "showresult"
);
不说了,不说了,上面罗嗦了这么多,我想大家也都看得头大了,下面还是

让具体的代码来发言把:
(请在使用代码前在你的服务器上建立一个叫nw的系统dsn文件,该文件使用了
northworld即中文access97自带的示例数据库)
下面的例子是这么进行的,default.htm中分为两祯,在
main.html页面中使用了rs技术,大家可以注意到在main.html中没有使用到subm
it
所以如果你在该页面中直接敲回车键的话什么都不会出现,你必须通过鼠标单击

那个"获取信息"按扭来使用这个局部页面刷新技术。在单击完该按扭后,页面会

一段小小的延迟(这段时间内java applet在后台建立了和服务端的连接)
然后马上页面回复正常的鼠标,你可以在该页面中继续进行其他的操作。
而不必象普通页面刷新时,你只有等待数据。
而info.asp大家一眼就能够看明白,其实就是一个很简单的处理字符串的程序。

如果大家要是对dhtml技术熟悉的话,完全可以在客户端完成这些操作。
至于empdata.asp就是服务端处理数据的程序了。
好了,其中的好处大家可以自己去
体会。

特别注意,不要改变太多代码,不然很容易出错,毕竟是在使用javascript编程

default.htm文件代码如下:
<html>
<head>
<title>rs技术的实现例子</title>
</head>
<frameset id=fset rows="70%,30%">
<frame name=main src="main.html">
<frame name=info src="info.asp">
</frameset>
</html>

maim.html文件代码如下
<html>
<head>
<title>rs技术的实现例子</title>
</head>
<body>
<script language="javascript" src="http://yourserver/_scriptlibrary/rs
.htm"></script>
<script language="javascript">
rsenableremotescripting("http://yourserver/_scriptlibrary");
</script>
<h1>雇员信息</h1>
<hr>
<form name=myform>
请输入你想查询的名字:
<br><input type=text name="emplastname" size=40>
<input type=button name=btnexecute style="width=150"
value="获取信息"
onclick="execasynch(emplastname.value)">
</form>
<hr>

<script language="javascript">
var serverurl = "http://yourserver";
var pageurl = "/batman/empdata.asp";

function refreshpage(co)
{
if (co.status != 0) {
alert("发生异常错误\n" +
message);
}
strtext = co.return_value;
top.info.location = "info.asp?info=" + escape(strtext);
}
function execasynch(emplastname)
{
rsexecute(serverurl+pageurl, "getempinfoasarray",
emplastname, refreshpage);
}
</script>
</body>
</html>

info.asp文件代码
<html>
<body>
<%
response.write request.servervariables("remote_user")

strtext = request.querystring("info")
if strtext = "" then response.end
arrdata = split(strtext, "|")
arrlabels = split("职工,头衔,城市,雇佣日期", ",")
%>
<table border=0>
<%
for i=0 to 3
response.write "<tr>"
response.write "<td><b>" & arrlabels(i) & "</b></td>"
response.write "<td><i>" & arrdata(i) & "</i></td>"
next
%>
</table>
</body>
</html>

empdata.asp文件
<%@ language=vbscript %>
<% rsdispatch %>

<script runat=server language=javascript>
<!–#include virtual="/_scriptlibrary/rs.asp"–>

function description()
{
this.getempinfoasarray = dogetdata;
}
public_description = new description();

function dogetdata(empname)
{
sql = "select * from 雇员 where [名字]=" + empname + "";

rst = new activexobject("adodb.recordset");
rst.cursorlocation = 3;

rst.open(sql, "nw");
i = 0;
strtext = "";

if (rst.recordcount == 1) {
strtext += rst.fields("雇员id").value + " – " +
rst.fields("尊称").value + " " +
rst.fields("姓氏").value + " " +
rst.fields("名字").value;
strtext += "|";
strtext += rst.fields("头衔").value;
strtext += "|";
strtext += rst.fields("城市").value + " " +
rst.fields("地区").value + ", " +
rst.fields("国家").value;
strtext += "|";
d = new date(rst.fields("雇用日期").value);
strtext += (1+d.getmonth()) + "/" + d.getdate() + "/" +
d.getyear();
}
return strtext;
}
</script>
=======================================================================================================================================
转贴-关于资料上传的问题 (2000.03.29)

关于资料上传的问题

需要一服务器端控件,如safileup(http://www.serverpages.com/upload )等,

也可以自己用vb写: 编写web方式上载文件的asp组件

—- 基于web方式上载文件,要遵从rfc1867标准。但iis没有提供这方面的支持
。虽然可以从internet上下载这方面的asp组件,但大多都是试用版,有使用时间
的限制;并且,功能上也不能完全满足自己的要求。我们可以编写自己的asp组件
,使之适合自己的应用系统的需求。

—- 我们假设有如下的一个上载文件的.html文件,它被命名为demo.htm:

< html >
< body >
< form method="post" enctype=
"multipart/form-data" action="upload.asp" >
< input type=text name="text1" >< br >
< input type=file name="file1" >< br >
< input type=submit value="上载" >
< /form >
< /body >
< /html >
—- 按照rfc1867标准,demo.htm传到服务器端的二进制数据具有类似的如下格

式:

—————————–5fi25134734389
content-disposition: form-data; name="text1"

text test
—————————–5fi25134734389–
content-disposition: form-data;
name="file1"; filename="e:\gif\girl.gif"
content-type: image/gif

gif89a? ????噜鄛}}^^^υ,?
—————————–5fi25134734389
—- 其中, 类似于"—————————–5fi25134734389”的这一
段字符串我们称之为"定界符”。我们看到,demo.htm文件中的form元素"text
1”,"file1”出现在定界符后的"name=”标记处;对text1而言,"name=”标
记后紧接两对回车换行符(chr(13)&chr(10)&chr(13)&chr(10))即是客户端输入
的值,该值结束时跟一对回车换行符和一个定界符;对file1而言,"name=”标
记后的"filename=” 标记指出了客户端上载的文件的路径和文件名,下一行指
出了文件的类型,后跟两对回车换行符表示文件数据的开始,文件数据结束时跟
一对回车换行符和一个定界符。

—- 下面,我们以vb6.0中文版环境为例,讲述如何编写上载文件的asp组件:

—- 1. 进入vb时,选择工程类型为activex dll。

—- 2. 在工程窗口中选择工程,在属性窗口中给工程重命名,如"huang”;

在工程窗口中选择类模块"class1”, 在属性窗口中将其重命名,如"upload
file”,并且,将instancing属性设置为"5-multiuse”。
—- 3. 选择vb菜单"工程—— >引用—— >microsoft active server pages
object library”,单击"确定”。

—- 4. 编写类模块,代码 zip 2kb

—- 对存入文件的目标目录,要有写入的权限。

—- 对onstartpage过程的说明:当客户请求一个基于asp的web文件时,web 服

务器会调用该asp文件上所有asp组件的onstartpage方法。web开发者可以在onst

artpage过程中访问asp的内建组件。

—- 5.选择"文件—— >生成huang.dll”, 生成huang.dll。如果vb就在iis

服务器上,则vb会自动注册该组件;否则,把huang.dll拷贝到iis服务器所在的

windows nt目录下,运行"regsrv32 huang.dll”注册该组件。

—- 至此,文件上载的asp组件编写并注册完成。

—- 编写upload.asp文件如下:

< %@ language=vbscript % >
< html >
< body >
< %
dim txtvalue

set obj = server.createobject("huang.uploadfile")
txtvalue = obj.getthevalue("text1")
response.write( "text1的输入值是: " & txtvalue)
response.write "< p > < /p >"
response.write "选择的文件已经上载到服务器!"
obj.savethefile "file1", "c:\test"
% >
< /body >
< /html >
—- 上述例子在vb6.0中文版和iis4.0中文版下调试通过。

代码可到:http://www.ccw.com.cn/99/tips/9905/052601-06.zip 下载。

—- 基于web方式上载文件,要遵从rfc1867标准。但iis没有提供这方面的支持
。虽然可以从internet上下载这方面的asp组件,但大多都是试用版,有使用时间
的限制;并且,功能上也不能完全满足自己的要求。我们可以编写自己的asp组件
,使之适合自己的应用系统的需求。

—- 我们假设有如下的一个上载文件的.html文件,它被命名为demo.htm:

< html >
< body >
< form method="post" enctype=
"multipart/form-data" action="upload.asp" >
< input type=text name="text1" >< br >
< input type=file name="file1" >< br >
< input type=submit value="上载" >
< /form >
< /body >
< /html >
—- 按照rfc1867标准,demo.htm传到服务器端的二进制数据具有类似的如下格
式:

—————————–5fi25134734389
content-disposition: form-data; name="text1"

text test
—————————–5fi25134734389–
content-disposition: form-data;
name="file1"; filename="e:\gif\girl.gif"
content-type: image/gif

gif89a? ????噜鄛}}^^^υ,?
—————————–5fi25134734389
—- 其中, 类似于"—————————–5fi25134734389”的这一
段字符串我们称之为"定界符”。我们看到,demo.htm文件中的form元素"text
1”,"file1”出现在定界符后的"name=”标记处;对text1而言,"name=”标
记后紧接两对回车换行符(chr(13)&chr(10)&chr(13)&chr(10))即是客户端输入
的值,该值结束时跟一对回车换行符和一个定界符;对file1而言,"name=”标
记后的"filename=” 标记指出了客户端上载的文件的路径和文件名,下一行指
出了文件的类型,后跟两对回车换行符表示文件数据的开始,文件数据结束时跟
一对回车换行符和一个定界符。

—- 下面,我们以vb6.0中文版环境为例,讲述如何编写上载文件的asp组件:

—- 1. 进入vb时,选择工程类型为activex dll。

—- 2. 在工程窗口中选择工程,在属性窗口中给工程重命名,如"huang”;
在工程窗口中选择类模块"class1”, 在属性窗口中将其重命名,如"upload
file”,并且,将instancing属性设置为"5-multiuse”。

—- 3. 选择vb菜单"工程—— >引用—— >microsoft active server pages
object library”,单击"确定”。

—- 4. 编写类模块,代码 zip 2kb

—- 对存入文件的目标目录,要有写入的权限。

—- 对onstartpage过程的说明:当客户请求一个基于asp的web文件时,web 服
务器会调用该asp文件上所有asp组件的onstartpage方法。web开发者可以在onst
artpage过程中访问asp的内建组件。

—- 5.选择"文件—— >生成huang.dll”, 生成huang.dll。如果vb就在iis
服务器上,则vb会自动注册该组件;否则,把huang.dll拷贝到iis服务器所在的
windows nt目录下,运行"regsrv32 huang.dll”注册该组件。

—- 至此,文件上载的asp组件编写并注册完成。

—- 编写upload.asp文件如下:

< %@ language=vbscript % >
< html >
< body >
< %
dim txtvalue

set obj = server.createobject("huang.uploadfile")
txtvalue = obj.getthevalue("text1")
response.write( "text1的输入值是: " & txtvalue)
response.write "< p > < /p >"
response.write "选择的文件已经上载到服务器!"
obj.savethefile "file1", "c:\test"
% >
< /body >
< /html >
—- 上述例子在vb6.0中文版和iis4.0中文版下调试通过。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ASP精华文摘-003
分享到: 更多 (0)