熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

不刷新頁面的情況下調用ASP.NET

2013-11-15 12:54:52  來源: ASP編程 

  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>


From:http://tw.wingwit.com/Article/program/ASP/201311/21869.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.