RS技术的一个具体例子在前面的帖子中我介绍了RS的基本工作原理显然如果将RS技术运用在一个网站的设计中将会有很多非凡的作用(尤其是它的那个最大的优点可以在不刷新页面的情况下调用服务端的代码)正是因为这个特点你就可以象在编写一个传统的C/S模式的程序一样对数据库的数据进行处理了(我想大家一定很想知道具体应该如何来实现了下面将给出一个具体的例子调试这个破程序几乎快把我给累死呵呵)
从前面的描述可以看到要使用RS技术就需要客户端和服务端满足下面两个条件
客户端只需要支持Java applet即可
而服务端只需要支持ASP即可换句话说就是RS技术是完全独立与浏览器的(当然浏览器至少需要满足支持Java和JavaScript)你可以在IE中使用也可以完全在NC中使用这也是区别与RDS技术的一个显着特点
在能够灵活运用RS技术前先要说明一个问题就是前面也曾经提到过的异步调用的问题也正是因为有异步调用才能够实现你只刷新页面的某一部分而不用刷新整个页面
由于它的这个特点你可以让服务端来实现在你浏览页面的同时对你输入数据的合法性检查(当然这可以是一系列很复杂的合法性检查例如需要将用户输入的数据和数据库内已有的数据进行对比等这个可不是客户端的JS能够解决的)然后当服务端返回检查结果后你再进行相应的操作(例如弹出一个对话框告诉用户输入出错等等)异步调用时的语法如下
RSExecute(serverURL functionname param_list)
第一个参数是你想调用的asp页面的完整的URL路径
第二个参数是你想调用函数的名称
后面的就是该函数需要的输入参数了
如果你想调用的函数需要两个输入参数的话就是这样的写法
RSExecute(serverURL functionname f_arg_ f_arg_)
当进行调用时有两种写法
一种是有返回结果的调用方式
objResult = RSExecute(serverURL functionname f_arg_ f_arg_)
另外一种则是没有返回结果的调用方式
RSExecute(url func_name f_arg_ f_arg_ CallbackFunction)
这种调用方式要特别的注意其中的CallbackFunction是客户端的一个JS函数它表示一但RS执行完毕服务端上的调用就会马上调用这个函数并把结果返回到这个函数中去
一个典型的CallbackFunction函数应该是这样的结构
function CallbackFunction(objResult) { //你自己的处理过程}
其中唯一的输入参数objResult就是RS调用的返回值
下面我们假设这样一种情况
用户在浏览器中输入了用户的email地址然后用户离开了email地址输入框进入接下来的输入过程这个时候就是RS该上场了它根据用户输入的地址在服务端的数据库中查询这个地址就可以判断出这个用户是否已经存在然后把结果返回给客户端在客户端再使用DHTML技术在一个叫\ShowResult\的输入框里面提示用户以前输入的信息
function CallbackFunc(objResult) { // 提示用户的信息window[ntext]value = objResultreturn_value}而RSExecute()应该这么调用RSExecute(serverURL functionname f_arg_ CallbackFunc
\ShowResult\)
不说了不说了上面罗嗦了这么多我想大家也都看得头大了下面还是让具体的代码来发言把
(请在使用代码前在你的服务器上建立一个叫NW的系统DSN文件该文件使用了Northworld即中文ACCESS自带的示例数据库)
下面的例子是这么进行的中分为两祯在l页面中使用了RS技术大家可以注意到在l中没有使用到submit所以如果你在该页面中直接敲回车键的话什么都不会出现你必须通过鼠标单击那个\获取信息\按扭来使用这个局部页面刷新技术在单击完该按扭后页面会有一段小小的延迟(这段时间内java applet在后台建立了和服务端的连接)然后马上页面回复正常的鼠标你可以在该页面中继续进行其他的操作而不必象普通页面刷新时你只有等待数据而infoasp大家一眼就能够看明白其实就是一个很简单的处理字符串的程序
如果大家要是对DHTML技术熟悉的话完全可以在客户端完成这些操作至于EmpDataasp就是服务端处理数据的程序了好了其中的好处大家可以自己去体会
特别注意不要改变太多代码不然很容易出错毕竟是在使用JavaScript编程
文件代码如下
<HTML>
<HEAD>
<TITLE>RS技术的实现例子</TITLE>
</HEAD>
<FRAMESET id=fset rows=\%%\>
<FRAME name=main src=\l\>
<FRAME name=info src=\infoasp\>
</FRAMESET>
</HTML>
l文件代码如下
<HTML>
<HEAD>
<TITLE>RS技术的实现例子</TITLE>
</HEAD>
<BODY>
<script language=\JavaScript\ src=\\></script>
<script language=\JavaScript\>
RSEnableRemoteScripting(\//YourServer/_ScriptLibrary\);
</script>
<h>雇员信息</h>
<hr>
<form name=MyForm>
请输入你想查询的名字:
<br><input type=text name=\empLastName\ size=>
<input type=button name=btnExecute style=\width=\
value=\获取信息\
onclick=\execAsynch(empLastNamevalue)\>
</form>
<hr>
<SCRIPT LANGUAGE=\javascript\>
var serverURL = \//YourServer\;
var pageURL = \/batman/EmpDataasp\;
function refreshPage(co)
{
if (costatus != ) {
alert(\发生异常错误\\n\ +
message);
}
strText = coreturn_value;
location = \infoasp?info=\ + escape(strText);
}
function execAsynch(empLastName)
{
RSExecute(serverURL+pageURL \GetEmpInfoAsArray\
empLastName refreshPage);
}
</SCRIPT>
</BODY>
</HTML>
infoasp文件代码
<HTML>
<BODY>
<%
ResponseWrite RequestServerVariables(\REMOTE_USER\)
strText = RequestQueryString(\info\)
If strText = \\ Then ResponseEnd
arrData = split(strText \|\)
arrLabels = split(\职工头衔城市雇佣日期\ \\)
%>
<table border=>
<%
for i= to
ResponseWrite \<tr>\
ResponseWrite \<td><b>\ & arrLabels(i) & \</b></td>\
ResponseWrite \<td><i>\ & arrData(i) & \</i></td>\
next
%>
</table>
</BODY>
</HTML>
EmpDataasp文件
<%@ LANGUAGE=VBSCRIPT %>
<% RSDispatch %>
<SCRIPT RUNAT=SERVER Language=javascript>
<!#INCLUDE VIRTUAL=\/_ScriptLibrary/RSASP\>
function Description()
{
thisGetEmpInfoAsArray = DoGetData;
}
public_description = new Description();
function DoGetData(empName)
{
sql = \select * from 雇员 where [名字]=\\ + empName + \\\;
rst = new ActiveXObject(\ADODBRecordset\);
rstCursorLocation = ;
rstOpen(sql \NW\);
i = ;
strText = \\;
if (rstRecordCount == ) {
strText += rstFields(\雇员ID\)Value + \ \ +
rstFields(\尊称\)Value + \ \ +
rstFields(\姓氏\)Value + \ \ +
rstFields(\名字\)Value;
strText += \|\;
strText += rstFields(\头衔\)Value;
strText += \|\;
strText += rstFields(\城市\)Value + \ \ +
rstFields(\地区\)Value + \ \ +
rstFields(\国家\)Value;
strText += \|\;
d = new Date(rstFields(\雇用日期\)Value);
strText += (+dgetMonth()) + \/\ + dgetDate() + \/\ +dgetYear();
}
return strText;
}
</SCRIPT>