您的位置:首页精文荟萃软件资讯 → 不刷新页面的情况下调用ASP

不刷新页面的情况下调用ASP

时间:2004/10/8 13:46:00来源:本站整理作者:蓝点我要评论(0)

 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文件代码如下:


RS技术的实现例子


    
    





Maim.html文件代码如下


RS技术的实现例子




   RSEnableRemoteScripting("http://YourServer/_ScriptLibrary");

雇员信息





请输入你想查询的名字:

  
       value="获取信息"  
       onclick="execAsynch(empLastName.value)">







    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);
    }






info.asp文件代码


<%
Response.Write Request.ServerVariables("REMOTE_USER")  
    strText = Request.QueryString("info")
    If strText = "" Then Response.End
        arrData = split(strText, "|")
        arrLabels = split("职工,头衔,城市,雇佣日期", ",")
%>

<%  
    for i=0 to 3
        Response.Write ""
        Response.Write "" & arrLabels(i) & ""  
        Response.Write "" & arrData(i) & ""  
    next
%>






EmpData.asp文件
<%@ LANGUAGE=VBSCRIPT %>
<% RSDispatch %>








    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;
        }
  

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本