欢迎光临
我们一直在努力

关于页面局部刷新例程

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

【batman】 于 99-10-26 下午 06:55:06 加贴在 chinaasp joy asp

rs技术的一个具体例子

在前面的帖子中,我介绍了rs的基本工作原理,显然如果将rs技术运用在一个

网站的设计中将会有很多非凡的作用(尤其是它的那个最大的优点,可以在不刷新

页面的情况下调用服务端的代码)。正是因为这个特点,你就可以象在编写一个

传统的c/s模式的程序一样,对数据库的数据进行处理了(我想大家一定很想知道具体应该如何来实现了,下面将给出一个具体的例子,调试这个破程序几乎快把我给累死,呵呵。)

从前面的描述可以看到,要使用rs技术就需要客户端和服务端满足下面两个条件:

1。客户端只需要支持java applet即可

2。而服务端只需要支持asp即可

换句话说,就是rs技术是完全独立与浏览器的(当然浏览器至少需要满足支持java

和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中没有使用到submit

所以如果你在该页面中直接敲回车键的话什么都不会出现,你必须通过鼠标单击

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

一段小小的延迟(这段时间内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>

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